From: Mark Nauwelaerts Date: Wed, 11 Aug 2010 10:49:40 +0000 (+0200) Subject: streamsynchronizer: prevent deadlock with _chain when deactivating pad X-Git-Tag: 1.19.3~511^2~8170 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=9975a2d7b411967c965f6cef8fd4d7ea97f619f7;p=platform%2Fupstream%2Fgstreamer.git streamsynchronizer: prevent deadlock with _chain when deactivating pad Fixes #626581. --- diff --git a/gst/playback/gststreamsynchronizer.c b/gst/playback/gststreamsynchronizer.c index 5899559..5967abd 100644 --- a/gst/playback/gststreamsynchronizer.c +++ b/gst/playback/gststreamsynchronizer.c @@ -750,6 +750,11 @@ gst_stream_synchronizer_release_stream (GstStreamSynchronizer * self, } g_assert (l != NULL); + /* we can drop the lock, since stream exists now only local. + * Moreover, we should drop, to prevent deadlock with STREAM_LOCK + * (due to reverse lock order) when deactivating pads */ + GST_STREAM_SYNCHRONIZER_UNLOCK (self); + gst_pad_set_element_private (stream->srcpad, NULL); gst_pad_set_element_private (stream->sinkpad, NULL); gst_pad_set_active (stream->srcpad, FALSE); @@ -786,6 +791,9 @@ gst_stream_synchronizer_release_stream (GstStreamSynchronizer * self, * when it's reconfigured, which happens when the streams * change */ + + /* lock for good measure, since the caller had it */ + GST_STREAM_SYNCHRONIZER_LOCK (self); } static void