mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-20 04:56:24 +00:00
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().
This commit is contained in:
parent
2b0d392741
commit
aa94d5dc9a
1 changed files with 8 additions and 10 deletions
|
@ -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. */
|
||||
|
|
Loading…
Reference in a new issue