From d972acd3c5597fa6b7a991231ae75547bbb5d958 Mon Sep 17 00:00:00 2001 From: Guillaume Desmottes Date: Mon, 19 Feb 2024 15:55:55 +0100 Subject: [PATCH] uridecodebin3: fix deadlock when switching input item There was a race between urisourcebin src pad handlers. One was starting the next item before the other was blocked. See https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/3297#note_2288799 for details. Fix #3297 Part-of: --- subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c b/subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c index f8522a0513..9bcd791042 100644 --- a/subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c +++ b/subprojects/gst-plugins-base/gst/playback/gsturidecodebin3.c @@ -1356,7 +1356,10 @@ uri_src_block_probe (GstPad * pad, GstPadProbeInfo * info, } PLAY_ITEMS_LOCK (handler->uridecodebin); - if (play_item_is_eos (handler->uridecodebin->input_item)) { + if (srcpad->block_probe_id == 0) { + GST_DEBUG_OBJECT (pad, "pad has already been unblocked"); + ret = GST_PAD_PROBE_REMOVE; + } else if (play_item_is_eos (handler->uridecodebin->input_item)) { GST_DEBUG_OBJECT (handler->uridecodebin, "We can switch over to the next input item"); switch_and_activate_input_locked (handler->uridecodebin,