From 724de12336f7822685dba5c30dc3689a3529791e 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 f1d8f5b7c1..a4ebffe298 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);