From 67cc69ad52addeee2999f5919cfc3b0fbc554ec8 Mon Sep 17 00:00:00 2001 From: Sebastian Dröge Date: Mon, 5 Jan 2009 17:31:13 +0000 Subject: ext/pulse/pulsesink.c: Don't wait for the pulse mainloop when destroying the stream. Original commit message from CVS: * ext/pulse/pulsesink.c: (gst_pulsesink_destroy_stream): Don't wait for the pulse mainloop when destroying the stream. Fixes a deadlock when the pulsedaemon goes away while pulsesink is PLAYING. Fixes bug #556986. --- ChangeLog | 7 +++++++ ext/pulse/pulsesink.c | 11 ++++------- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2976ea66..823bc68d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2009-01-05 Sebastian Dröge + + * ext/pulse/pulsesink.c: (gst_pulsesink_destroy_stream): + Don't wait for the pulse mainloop when destroying the stream. + Fixes a deadlock when the pulsedaemon goes away while pulsesink + is PLAYING. Fixes bug #556986. + 2009-01-05 Sebastian Dröge Patch by: Sascha Hauer diff --git a/ext/pulse/pulsesink.c b/ext/pulse/pulsesink.c index b5b980f1..282ce25a 100644 --- a/ext/pulse/pulsesink.c +++ b/ext/pulse/pulsesink.c @@ -279,7 +279,6 @@ gst_pulsesink_destroy_stream (GstPulseSink * pulsesink) { if (pulsesink->stream) { pa_stream_disconnect (pulsesink->stream); - pa_threaded_mainloop_wait (pulsesink->mainloop); pa_stream_unref (pulsesink->stream); pulsesink->stream = NULL; } @@ -588,16 +587,14 @@ gst_pulsesink_prepare (GstAudioSink * asink, GstRingBufferSpec * spec) if (!pulsesink->context || pa_context_get_state (pulsesink->context) != PA_CONTEXT_READY) { GST_ELEMENT_ERROR (pulsesink, RESOURCE, FAILED, ("Bad context state: %s", - pulsesink-> - context ? pa_strerror (pa_context_errno (pulsesink->context)) : - NULL), (NULL)); + pulsesink->context ? pa_strerror (pa_context_errno (pulsesink-> + context)) : NULL), (NULL)); goto unlock_and_fail; } if (!(pulsesink->stream = pa_stream_new (pulsesink->context, - pulsesink-> - stream_name ? pulsesink->stream_name : "Playback Stream", - &pulsesink->sample_spec, + pulsesink->stream_name ? pulsesink-> + stream_name : "Playback Stream", &pulsesink->sample_spec, gst_pulse_gst_to_channel_map (&channel_map, spec)))) { GST_ELEMENT_ERROR (pulsesink, RESOURCE, FAILED, ("Failed to create stream: %s", -- cgit