miniobject: add gst_clear_mini_object()
authorNiels De Graef <nielsdegraef@gmail.com>
Sat, 3 Nov 2018 19:00:57 +0000 (20:00 +0100)
committerSebastian Dröge <slomo@coaxion.net>
Mon, 5 Nov 2018 11:06:30 +0000 (11:06 +0000)
This is based on g_clear_object(). Basically, you can use this instead
of using gst_mini_object_unref (which needs to be preceded by a NULL-check).

Also fixes #275

gst/gstminiobject.c
gst/gstminiobject.h

index 251d526..324346c 100644 (file)
@@ -669,6 +669,30 @@ gst_mini_object_unref (GstMiniObject * mini_object)
 }
 
 /**
+ * gst_clear_mini_object: (skip)
+ * @object_ptr: a pointer to a #GstMiniObject reference
+ *
+ * Clears a reference to a #GstMiniObject.
+ *
+ * @object_ptr must not be %NULL.
+ *
+ * If the reference is %NULL then this function does nothing.
+ * Otherwise, the reference count of the object is decreased using
+ * gst_mini_object_unref() and the pointer is set to %NULL.
+ *
+ * A macro is also included that allows this function to be used without
+ * pointer casts.
+ *
+ * Since: 1.16
+ **/
+#undef gst_clear_mini_object
+void
+gst_clear_mini_object (volatile GstMiniObject ** object_ptr)
+{
+  g_clear_pointer (object_ptr, gst_mini_object_unref);
+}
+
+/**
  * gst_mini_object_replace:
  * @olddata: (inout) (transfer full) (nullable): pointer to a pointer to a
  *     mini-object to be replaced
index 736e7b4..b9d3314 100644 (file)
@@ -235,6 +235,10 @@ GST_API
 void            gst_mini_object_unref          (GstMiniObject *mini_object);
 
 GST_API
+void        gst_clear_mini_object (volatile GstMiniObject **object_ptr);
+#define     gst_clear_mini_object(object_ptr) g_clear_pointer ((object_ptr), gst_mini_object_unref)
+
+GST_API
 void            gst_mini_object_weak_ref        (GstMiniObject *object,
                                                 GstMiniObjectNotify notify,
                                                 gpointer data);