summaryrefslogtreecommitdiff
path: root/gst/gstminiobject.c
diff options
context:
space:
mode:
authorTim-Philipp Müller <tim.muller@collabora.co.uk>2011-05-16 13:39:25 +0100
committerTim-Philipp Müller <tim.muller@collabora.co.uk>2011-05-17 11:38:30 +0100
commitda21881f281d0570035d44569e1bdef9e9cf54e3 (patch)
treee75732f63a5be6cbec3f429197e6fbfabcc71f61 /gst/gstminiobject.c
parentb4dea3a1d3133b9a94ffdaba5122a59cdae9cf9c (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.c20
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++)