mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-26 18:20:44 +00:00
gst: Fix floating reference inconsistencies in error cases
If a function takes a floating reference and sinks it, it should also do that in error cases. I.e. call ref_sink() followed by unref(). Otherwise the reference counting behaviour of the function will be different between the good and the error case, and simply inconsistent. https://bugzilla.gnome.org/show_bug.cgi?id=747990
This commit is contained in:
parent
eafaefe9da
commit
7c4d3a6c52
3 changed files with 12 additions and 0 deletions
|
@ -1375,6 +1375,8 @@ duplicate_name:
|
|||
elem_name, GST_ELEMENT_NAME (bin));
|
||||
GST_OBJECT_UNLOCK (bin);
|
||||
g_free (elem_name);
|
||||
gst_object_ref_sink (element);
|
||||
gst_object_unref (element);
|
||||
return FALSE;
|
||||
}
|
||||
had_parent:
|
||||
|
@ -1382,6 +1384,8 @@ had_parent:
|
|||
g_warning ("Element '%s' already has parent", elem_name);
|
||||
GST_OBJECT_UNLOCK (bin);
|
||||
g_free (elem_name);
|
||||
gst_object_ref_sink (element);
|
||||
gst_object_unref (element);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
@ -1537,6 +1541,8 @@ no_function:
|
|||
{
|
||||
g_warning ("adding elements to bin '%s' is not supported",
|
||||
GST_ELEMENT_NAME (bin));
|
||||
gst_object_ref_sink (element);
|
||||
gst_object_unref (element);
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -723,6 +723,8 @@ name_exists:
|
|||
pad_name, GST_ELEMENT_NAME (element));
|
||||
GST_OBJECT_UNLOCK (element);
|
||||
g_free (pad_name);
|
||||
gst_object_ref_sink (pad);
|
||||
gst_object_unref (pad);
|
||||
return FALSE;
|
||||
}
|
||||
had_parent:
|
||||
|
@ -732,6 +734,8 @@ had_parent:
|
|||
pad_name, GST_ELEMENT_NAME (element));
|
||||
GST_OBJECT_UNLOCK (element);
|
||||
g_free (pad_name);
|
||||
gst_object_ref_sink (pad);
|
||||
gst_object_unref (pad);
|
||||
return FALSE;
|
||||
}
|
||||
no_direction:
|
||||
|
|
|
@ -693,6 +693,8 @@ had_parent:
|
|||
{
|
||||
GST_CAT_DEBUG_OBJECT (GST_CAT_REFCOUNTING, object,
|
||||
"set parent failed, object already had a parent");
|
||||
gst_object_ref_sink (object);
|
||||
gst_object_unref (object);
|
||||
GST_OBJECT_UNLOCK (object);
|
||||
return FALSE;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue