diff options
author | Edward Hervey <edward@centricular.com> | 2017-04-14 18:16:28 +0200 |
---|---|---|
committer | Edward Hervey <bilboed@bilboed.com> | 2017-04-15 08:18:39 +0200 |
commit | e00be2758528eb4ddb326efe4c261ce3b776a6e5 (patch) | |
tree | 17a3826af8ce52f40e376081a7053bfc71b2e6c5 /gst-libs | |
parent | 44ec6bb2f3a32db06d4b6c0d28057c93dbed1304 (diff) | |
download | gstreamer-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.c | 2 |
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) || |