summaryrefslogtreecommitdiff
path: root/gst-libs
diff options
context:
space:
mode:
authorEdward Hervey <edward@centricular.com>2017-04-14 18:16:28 +0200
committerEdward Hervey <bilboed@bilboed.com>2017-04-15 08:18:39 +0200
commite00be2758528eb4ddb326efe4c261ce3b776a6e5 (patch)
tree17a3826af8ce52f40e376081a7053bfc71b2e6c5 /gst-libs
parent44ec6bb2f3a32db06d4b6c0d28057c93dbed1304 (diff)
downloadgstreamer-plugins-bad-e00be2758528eb4ddb326efe4c261ce3b776a6e5.tar.gz
adaptivedemux: Don't hold locks when pushing FLUSH_START
Some actions (Qos, reconfigure, ...) might take place before we finish pushing out flush_start. One problem would be that: 1) The QOS handling in adaptivedemux takes the MANIFEST LOCK That QOS event comes from basesink with its PREROLL_LOCK taken 2) FLUSH_START is sent from adaptivedemux with the MANIFEST_LOCK taken and the basesink flushing handler needs to take the PREROLL_LOCK => deadlock https://bugzilla.gnome.org/show_bug.cgi?id=781320
Diffstat (limited to 'gst-libs')
-rw-r--r--gst-libs/gst/adaptivedemux/gstadaptivedemux.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
index 0a5eb0cca..756f0c0db 100644
--- a/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
+++ b/gst-libs/gst/adaptivedemux/gstadaptivedemux.c
@@ -1544,7 +1544,9 @@ gst_adaptive_demux_handle_seek_event (GstAdaptiveDemux * demux, GstPad * pad,
GST_DEBUG_OBJECT (demux, "sending flush start");
fevent = gst_event_new_flush_start ();
gst_event_set_seqnum (fevent, seqnum);
+ GST_MANIFEST_UNLOCK (demux);
gst_adaptive_demux_push_src_event (demux, fevent);
+ GST_MANIFEST_LOCK (demux);
gst_adaptive_demux_stop_tasks (demux);
} else if ((rate > 0 && start_type != GST_SEEK_TYPE_NONE) ||