aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2011-08-23 22:44:43 +0200
committerMax Kellermann <max@duempel.org>2011-08-23 22:45:47 +0200
commit25686e5bcee030a1e17f797f75258f26594bab39 (patch)
tree6bb9a94740343c56e32a76c910d437d71644b65e
parent8d70f808d981f34adef23d1e57b5b5fc9223c05b (diff)
downloadmpd-25686e5bcee030a1e17f797f75258f26594bab39.tar.gz
mpd-25686e5bcee030a1e17f797f75258f26594bab39.tar.xz
mpd-25686e5bcee030a1e17f797f75258f26594bab39.zip
pulse/output: fix deadlock when resuming the stream
Unlock the mainloop in all code paths.
-rw-r--r--NEWS1
-rw-r--r--src/output/pulse_output_plugin.c4
2 files changed, 4 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index 201b5b678..eaa8d194e 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ ver 0.16.4 (2011/??/??)
* output:
- alsa: fix SIGFPE when alsa announces a period size of 0
- httpd: don't warn on client disconnect
+ - pulse: fix deadlock when resuming the stream
ver 0.16.3 (2011/06/04)
diff --git a/src/output/pulse_output_plugin.c b/src/output/pulse_output_plugin.c
index d29fbd705..2635ed149 100644
--- a/src/output/pulse_output_plugin.c
+++ b/src/output/pulse_output_plugin.c
@@ -683,8 +683,10 @@ pulse_output_play(void *data, const void *chunk, size_t size, GError **error_r)
/* unpause if previously paused */
if (pulse_output_stream_is_paused(po) &&
- !pulse_output_stream_pause(po, false, error_r))
+ !pulse_output_stream_pause(po, false, error_r)) {
+ pa_threaded_mainloop_unlock(po->mainloop);
return 0;
+ }
/* wait until the server allows us to write */