summaryrefslogtreecommitdiffstats
path: root/src/pulse.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2008-05-27 12:15:57 +0000
committerLennart Poettering <lennart@poettering.net>2008-05-27 12:15:57 +0000
commita26c1816f67026d18d7051fdd66c04528a443ba1 (patch)
tree0fd1c638f8b5adf3027f90d1b31bf39f5129c368 /src/pulse.c
parentb591a78e98e75c54bb9e952d21de0b2fee7f983d (diff)
fix waiting for PA connection
git-svn-id: file:///home/lennart/svn/public/libcanberra/trunk@19 01b60673-d06a-42c0-afdd-89cb8e0f78ac
Diffstat (limited to 'src/pulse.c')
-rw-r--r--src/pulse.c21
1 files changed, 15 insertions, 6 deletions
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);