diff options
author | Lennart Poettering <mznyfn@0pointer.de> | 2009-07-31 16:02:21 +0200 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-08-03 12:36:25 +0200 |
commit | 16f837ec71a254a6bff7d26faf55237c4df5749c (patch) | |
tree | 920f4914d2f96421ebae64abb0745b9227e6e4af | |
parent | 422958fa4b8101af842220a67e77c8090ad34a8b (diff) |
pulse: call pa_threaded_mainloop_wait() to handle spurious wakeups
pa_threaded_mainloop_wait() can wake up for no reason, according to the
specs of the underlying POSIX ptrhead_cond_wait() docs, so we need to
call it in a loop here which should be cleaner anyway.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | pulse/pulse.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/pulse/pulse.c b/pulse/pulse.c index ae66b0c..6f58a7e 100644 --- a/pulse/pulse.c +++ b/pulse/pulse.c @@ -262,10 +262,17 @@ int pulse_connect(snd_pulse_t * p, const char *server) if (err < 0) goto error; - 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) - goto error; + if (!PA_CONTEXT_IS_GOOD(state)) + goto error; + + if (state == PA_CONTEXT_READY) + break; + + pa_threaded_mainloop_wait(p->mainloop); + } pa_threaded_mainloop_unlock(p->mainloop); |