]> git.alsa-project.org Git - alsa-plugins.git/commitdiff
pulse: call pa_threaded_mainloop_wait() to handle spurious wakeups
authorLennart Poettering <mznyfn@0pointer.de>
Fri, 31 Jul 2009 14:02:21 +0000 (16:02 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 3 Aug 2009 10:36:25 +0000 (12:36 +0200)
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>
pulse/pulse.c

index ae66b0c5fbc958f397cfee341f311a5a2aa641b0..6f58a7ec5295d1c48fd8c504b0e860b6790b1dcd 100644 (file)
@@ -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);