From da21881f281d0570035d44569e1bdef9e9cf54e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= Date: Mon, 16 May 2011 13:39:25 +0100 Subject: [PATCH] miniobject: delay private data initialisation until actually needed We only use the private instance data for weak references for now, so can delay initialisation until actually needed (microoptimisation) --- gst/gstminiobject.c | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c index be521aaa26..bbb4c30c5b 100644 --- a/gst/gstminiobject.c +++ b/gst/gstminiobject.c @@ -172,13 +172,8 @@ gst_mini_object_init (GTypeInstance * instance, gpointer klass) mini_object->refcount = 1; - /* Initialize the mini object's private data */ - - mini_object->priv = (GstMiniObjectPrivate *) - G_TYPE_INSTANCE_GET_PRIVATE (instance, GST_TYPE_MINI_OBJECT, - GstMiniObjectPrivate); - - mini_object->priv->wstack = NULL; + /* we delay initialising the mini object's private data until it's actually + * needed for now (mini_object->priv automatically inited to NULL) */ } static GstMiniObject * @@ -384,7 +379,7 @@ gst_mini_object_free (GstMiniObject * mini_object) * want to free the instance anymore */ if (G_LIKELY (g_atomic_int_dec_and_test (&mini_object->refcount))) { /* The weak reference stack is freed in the notification function */ - if (mini_object->priv->wstack) + if (mini_object->priv != NULL && mini_object->priv->wstack != NULL) weak_refs_notify (mini_object->priv->wstack); #ifndef GST_DISABLE_TRACE @@ -444,6 +439,13 @@ gst_mini_object_weak_ref (GstMiniObject * object, G_LOCK (weak_refs_mutex); + if (object->priv == NULL) { + object->priv = G_TYPE_INSTANCE_GET_PRIVATE (object, GST_TYPE_MINI_OBJECT, + GstMiniObjectPrivate); + + /* object->priv->wstack will have been inited to NULL automatically */ + } + if (object->priv->wstack) { /* Don't add the weak reference if it already exists. */ for (i = 0; i < object->priv->wstack->n_weak_refs; i++) { @@ -492,7 +494,7 @@ gst_mini_object_weak_unref (GstMiniObject * object, G_LOCK (weak_refs_mutex); - if (object->priv->wstack) { + if (object->priv != NULL && object->priv->wstack != NULL) { guint i; for (i = 0; i < object->priv->wstack->n_weak_refs; i++)