static void _gst_clock_id_free (GstClockID id) { GstClockEntry *entry; g_return_if_fail (id != NULL); GST_CAT_DEBUG (GST_CAT_CLOCK, "freed entry %p", id); entry = (GstClockEntry *) id; if (entry->destroy_data) entry->destroy_data (entry->user_data); #ifndef GST_DISABLE_TRACE _gst_alloc_trace_free (_gst_clock_entry_trace, id); #endif g_slice_free (GstClockEntry, id); }
/* finalize is called when the object has to free its resources */ static void gst_object_finalize (GObject * object) { GstObject *gstobject = GST_OBJECT_CAST (object); GST_CAT_TRACE_OBJECT (GST_CAT_REFCOUNTING, object, "finalize"); g_signal_handlers_destroy (object); g_free (gstobject->name); g_mutex_clear (&gstobject->lock); #ifndef GST_DISABLE_TRACE _gst_alloc_trace_free (_gst_object_trace, object); #endif ((GObjectClass *) gst_object_parent_class)->finalize (object); }
/** * gst_mini_object_unref: * @mini_object: the mini-object * * Decreases the reference count of the mini-object, possibly freeing * the mini-object. */ void gst_mini_object_unref (GstMiniObject * mini_object) { g_return_if_fail (mini_object != NULL); GST_CAT_TRACE (GST_CAT_REFCOUNTING, "%p unref %d->%d", mini_object, GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object), GST_MINI_OBJECT_REFCOUNT_VALUE (mini_object) - 1); g_return_if_fail (mini_object->refcount > 0); if (G_UNLIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) { gboolean do_free; if (mini_object->dispose) do_free = mini_object->dispose (mini_object); else do_free = TRUE; /* if the subclass recycled the object (and returned FALSE) we don't * want to free the instance anymore */ if (G_LIKELY (do_free)) { /* there should be no outstanding locks */ g_return_if_fail ((g_atomic_int_get (&mini_object->lockstate) & LOCK_MASK) < 4); if (mini_object->n_qdata) { call_finalize_notify (mini_object); g_free (mini_object->qdata); } #ifndef GST_DISABLE_TRACE _gst_alloc_trace_free (_gst_mini_object_trace, mini_object); #endif if (mini_object->free) mini_object->free (mini_object); } } }