From aa94d5dc9aa6ef381da6b60a67f218117c662958 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Sebastian=20Dr=C3=B6ge?= Date: Tue, 21 Oct 2014 13:30:27 +0200 Subject: [PATCH] decodebin: Fix locking The chain mutex needs to be locked when looking at chain->elements. Move code around a bit to require only one lock() and unlock(). --- gst/playback/gstdecodebin2.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c index bcc4db8..362c78a 100644 --- a/gst/playback/gstdecodebin2.c +++ b/gst/playback/gstdecodebin2.c @@ -2122,12 +2122,16 @@ connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad, if (pelem && gst_element_get_factory (pelem->element) == factory) skip = TRUE; } - CHAIN_MUTEX_UNLOCK (chain); - if (!skip && chain->elements) { + if (skip) { + GST_DEBUG_OBJECT (dbin, + "Skipping factory '%s' because it was already used in this chain", + gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory))); + CHAIN_MUTEX_UNLOCK (chain); + continue; + } else if (chain->elements) { GstElementFactory *chainelemfact; - CHAIN_MUTEX_LOCK (chain); delem = (GstDecodeElement *) chain->elements->data; chainelemfact = gst_element_get_factory (delem->element); @@ -2142,15 +2146,9 @@ connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad, CHAIN_MUTEX_UNLOCK (chain); continue; } - CHAIN_MUTEX_UNLOCK (chain); - } - if (skip) { - GST_DEBUG_OBJECT (dbin, - "Skipping factory '%s' because it was already used in this chain", - gst_plugin_feature_get_name (GST_PLUGIN_FEATURE_CAST (factory))); - continue; } + CHAIN_MUTEX_UNLOCK (chain); } /* emit autoplug-select to see what we should do with it. */ -- 2.7.4