mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 05:56:31 +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)
|
if (pelem && gst_element_get_factory (pelem->element) == factory)
|
||||||
skip = TRUE;
|
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;
|
GstElementFactory *chainelemfact;
|
||||||
|
|
||||||
CHAIN_MUTEX_LOCK (chain);
|
|
||||||
delem = (GstDecodeElement *) chain->elements->data;
|
delem = (GstDecodeElement *) chain->elements->data;
|
||||||
chainelemfact = gst_element_get_factory (delem->element);
|
chainelemfact = gst_element_get_factory (delem->element);
|
||||||
|
|
||||||
|
@ -2142,15 +2146,9 @@ connect_pad (GstDecodeBin * dbin, GstElement * src, GstDecodePad * dpad,
|
||||||
CHAIN_MUTEX_UNLOCK (chain);
|
CHAIN_MUTEX_UNLOCK (chain);
|
||||||
continue;
|
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. */
|
/* emit autoplug-select to see what we should do with it. */
|
||||||
|
|
Loading…
Reference in a new issue