From 3943503fc1906f36eda8d17c2e330cd97f05cd3f Mon Sep 17 00:00:00 2001 From: medithe Date: Tue, 7 Feb 2023 13:43:06 +0000 Subject: [PATCH] gstreamer: bin: Don't unlock unlocked mutex in gst_bin_remove_func() Calling `g_mutex_unlock(mutex)` leads to an undefined behavior if the mutex is not locked by the current thread. Part-of: --- subprojects/gstreamer/gst/gstbin.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/subprojects/gstreamer/gst/gstbin.c b/subprojects/gstreamer/gst/gstbin.c index fce96f3e8a..ed23c2633b 100644 --- a/subprojects/gstreamer/gst/gstbin.c +++ b/subprojects/gstreamer/gst/gstbin.c @@ -1567,8 +1567,10 @@ gst_bin_remove_func (GstBin * bin, GstElement * element) GST_OBJECT_LOCK (element); elem_name = g_strdup (GST_ELEMENT_NAME (element)); - if (GST_OBJECT_PARENT (element) != GST_OBJECT_CAST (bin)) + if (GST_OBJECT_PARENT (element) != GST_OBJECT_CAST (bin)) { + GST_OBJECT_UNLOCK (element); goto not_in_bin; + } /* remove the parent ref */ GST_OBJECT_PARENT (element) = NULL; @@ -1819,7 +1821,6 @@ no_state_recalc: /* ERROR handling */ not_in_bin: { - GST_OBJECT_UNLOCK (element); GST_OBJECT_UNLOCK (bin); GST_WARNING_OBJECT (bin, "Element '%s' is not in bin", elem_name); g_free (elem_name);