diff options
author | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2011-05-16 13:39:25 +0100 |
---|---|---|
committer | Tim-Philipp Müller <tim.muller@collabora.co.uk> | 2011-05-17 11:38:30 +0100 |
commit | da21881f281d0570035d44569e1bdef9e9cf54e3 (patch) | |
tree | e75732f63a5be6cbec3f429197e6fbfabcc71f61 /gst/gstminiobject.c | |
parent | b4dea3a1d3133b9a94ffdaba5122a59cdae9cf9c (diff) |
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)
Diffstat (limited to 'gst/gstminiobject.c')
-rw-r--r-- | gst/gstminiobject.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/gst/gstminiobject.c b/gst/gstminiobject.c index be521aaa2..bbb4c30c5 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++) |