gstobject: add gst_object_ref_sink

Add the gst_object_ref_sink() method to match the glib one.

API: GstObject::gst_object_ref_sink()
This commit is contained in:
Wim Taymans 2009-05-02 14:33:01 +02:00 committed by Wim Taymans
parent 20d2734a25
commit 54401df78c
4 changed files with 36 additions and 0 deletions

View file

@ -1214,6 +1214,7 @@ gst_object_save_thyself
gst_object_restore_thyself gst_object_restore_thyself
gst_object_ref gst_object_ref
gst_object_unref gst_object_unref
gst_object_ref_sink
gst_object_sink gst_object_sink
gst_object_replace gst_object_replace
gst_object_get_path_string gst_object_get_path_string

View file

@ -326,6 +326,39 @@ gst_object_unref (gpointer object)
g_object_unref (object); g_object_unref (object);
} }
/**
* gst_object_ref_sink:
* @object: a #GstObject to sink
*
* Increase the reference count of @object, and possibly remove the floating
* reference, if @object has a floating reference.
*
* In other words, if the object is floating, then this call "assumes ownership"
* of the floating reference, converting it to a normal reference by clearing
* the floating flag while leaving the reference count unchanged. If the object
* is not floating, then this call adds a new normal reference increasing the
* reference count by one.
*
* MT safe. This function grabs and releases @object lock.
*
* Since: 0.10.24
*/
void
gst_object_ref_sink (gpointer object)
{
g_return_if_fail (GST_IS_OBJECT (object));
GST_OBJECT_LOCK (object);
if (G_LIKELY (GST_OBJECT_IS_FLOATING (object))) {
GST_CAT_LOG_OBJECT (GST_CAT_REFCOUNTING, object, "unsetting floating flag");
GST_OBJECT_FLAG_UNSET (object, GST_OBJECT_FLOATING);
GST_OBJECT_UNLOCK (object);
} else {
GST_OBJECT_UNLOCK (object);
gst_object_ref (object);
}
}
/** /**
* gst_object_sink: * gst_object_sink:
* @object: a #GstObject to sink * @object: a #GstObject to sink

View file

@ -290,6 +290,7 @@ void gst_object_default_deep_notify (GObject *object, GstObject *ori
/* refcounting + life cycle */ /* refcounting + life cycle */
gpointer gst_object_ref (gpointer object); gpointer gst_object_ref (gpointer object);
void gst_object_unref (gpointer object); void gst_object_unref (gpointer object);
void gst_object_ref_sink (gpointer object);
void gst_object_sink (gpointer object); void gst_object_sink (gpointer object);
/* replace object pointer */ /* replace object pointer */

View file

@ -511,6 +511,7 @@ EXPORTS
gst_object_get_type gst_object_get_type
gst_object_has_ancestor gst_object_has_ancestor
gst_object_ref gst_object_ref
gst_object_ref_sink
gst_object_replace gst_object_replace
gst_object_restore_thyself gst_object_restore_thyself
gst_object_save_thyself gst_object_save_thyself