adaptivedemux2: stream: Don't take TRACKS_LOCK when sending EOS event
authorJan Schmidt <jan@centricular.com>
Tue, 21 Jun 2022 17:30:16 +0000 (03:30 +1000)
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Tue, 28 Jun 2022 18:34:31 +0000 (18:34 +0000)
The stream tracks list can't change while we're
iterating it from the scheduling thread,
and the event handler immediately takes the
tracks lock, causing a deadlock.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2650>

subprojects/gst-plugins-good/ext/adaptivedemux2/gstadaptivedemux-stream.c

index c331353..2784a17 100644 (file)
@@ -1452,15 +1452,12 @@ gst_adaptive_demux2_stream_push_event (GstAdaptiveDemux2Stream * stream,
    * We don't need to care about any other events
    */
   if (GST_EVENT_TYPE (event) == GST_EVENT_EOS) {
-    GstAdaptiveDemux *demux = stream->demux;
     GList *iter;
 
-    TRACKS_LOCK (demux);
     for (iter = stream->tracks; iter; iter = iter->next) {
       GstAdaptiveDemuxTrack *track = (GstAdaptiveDemuxTrack *) iter->data;
       ret &= gst_pad_send_event (track->sinkpad, gst_event_ref (event));
     }
-    TRACKS_UNLOCK (demux);
   }
 
   gst_event_unref (event);