mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 17:20:36 +00:00
bin: Fix minor race when adding to a bin
This patch simply add a null check around a case where a child may have been unparented concurrently to the deep_add_remove operation. This was found by accident in the form of an "IS_GST_OBJECT" assertion, but had no other known side effect in that test.
This commit is contained in:
parent
090a928329
commit
94ba1cea88
1 changed files with 9 additions and 5 deletions
14
gst/gstbin.c
14
gst/gstbin.c
|
@ -1122,11 +1122,15 @@ gst_bin_do_deep_add_remove (GstBin * bin, gint sig_id, const gchar * sig_name,
|
|||
while ((e = g_queue_pop_head (&elements))) {
|
||||
GstObject *parent = gst_object_get_parent (GST_OBJECT_CAST (e));
|
||||
|
||||
GST_LOG_OBJECT (bin, "calling %s for element %" GST_PTR_FORMAT
|
||||
" in bin %" GST_PTR_FORMAT, sig_name, e, parent);
|
||||
g_signal_emit (bin, sig_id, 0, parent, e);
|
||||
gst_object_unref (parent);
|
||||
g_object_unref (e);
|
||||
/* an element could have removed some of its internal elements
|
||||
* meanwhile, so protect against that */
|
||||
if (parent) {
|
||||
GST_LOG_OBJECT (bin, "calling %s for element %" GST_PTR_FORMAT
|
||||
" in bin %" GST_PTR_FORMAT, sig_name, e, parent);
|
||||
g_signal_emit (bin, sig_id, 0, parent, e);
|
||||
gst_object_unref (parent);
|
||||
g_object_unref (e);
|
||||
}
|
||||
}
|
||||
}
|
||||
gst_iterator_free (it);
|
||||
|
|
Loading…
Reference in a new issue