From a26c1816f67026d18d7051fdd66c04528a443ba1 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 27 May 2008 12:15:57 +0000 Subject: fix waiting for PA connection git-svn-id: file:///home/lennart/svn/public/libcanberra/trunk@19 01b60673-d06a-42c0-afdd-89cb8e0f78ac --- src/pulse.c | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/pulse.c b/src/pulse.c index b576058..0ceab56 100644 --- a/src/pulse.c +++ b/src/pulse.c @@ -295,13 +295,22 @@ int driver_open(ca_context *c) { return CA_ERROR_OOM; } - pa_threaded_mainloop_wait(p->mainloop); + for (;;) { + pa_context_state_t state = pa_context_get_state(p->context); - if (pa_context_get_state(p->context) != PA_CONTEXT_READY) { - ret = translate_error(pa_context_errno(p->context)); - pa_threaded_mainloop_unlock(p->mainloop); - driver_destroy(c); - return ret; + if (state == PA_CONTEXT_READY) + break; + + if (state == PA_CONTEXT_FAILED) { + ret = translate_error(pa_context_errno(p->context)); + pa_threaded_mainloop_unlock(p->mainloop); + driver_destroy(c); + return ret; + } + + ca_assert(state != PA_CONTEXT_TERMINATED); + + pa_threaded_mainloop_wait(p->mainloop); } pa_threaded_mainloop_unlock(p->mainloop); -- cgit