41 lines
1.1 KiB
Diff
41 lines
1.1 KiB
Diff
From 97e12ff5b53d569bb63d3ea32241d56f2f14cb73 Mon Sep 17 00:00:00 2001
|
|
From: Lennart Poettering <lennart@poettering.net>
|
|
Date: Fri, 31 Jul 2009 15:34:13 +0200
|
|
Subject: [PATCH 4/4] 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.
|
|
---
|
|
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);
|
|
|
|
--
|
|
1.6.3.3
|
|
|