From 001c7f04a06e261cebd191a541c1f23d13e01022 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sebastian=20Dr=C3=B6ge?= Date: Sat, 12 Mar 2016 19:45:26 +0200 Subject: [PATCH] decodebin: Don't hold EXPOSE_LOCK in type_found() outside the stream lock In other places we lock it the other way around, leading to possible deadlocks. Also this will deadlock if analyze_pad() causes a new element to be autoplugged that adds new pads on itself when its state is changed. https://bugzilla.gnome.org/show_bug.cgi?id=763491 --- gst/playback/gstdecodebin2.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index 1dfe6a31f7..a3bc619477 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -2841,7 +2841,6 @@ type_found (GstElement * typefind, guint probability, goto exit; } - EXPOSE_LOCK (decode_bin); pad = gst_element_get_static_pad (typefind, "src"); sink_pad = gst_element_get_static_pad (typefind, "sink"); @@ -2862,17 +2861,15 @@ type_found (GstElement * typefind, guint probability, if (analyze_new_pad (decode_bin, typefind, pad, caps, decode_bin->decode_chain, NULL)) expose_pad (decode_bin, typefind, decode_bin->decode_chain->current_pad, - pad, caps, decode_bin->decode_chain, FALSE); + pad, caps, decode_bin->decode_chain, TRUE); + gst_decode_chain_unref (chain); } GST_PAD_STREAM_UNLOCK (sink_pad); - gst_object_unref (sink_pad); gst_object_unref (pad); - EXPOSE_UNLOCK (decode_bin); - exit: return; }