From 5cc4714ecf91bc2605223594f4726722a99174fd Mon Sep 17 00:00:00 2001 From: Sjoerd Simons Date: Fri, 9 Jan 2009 16:15:37 +0000 Subject: [PATCH] Free ready callbacks in finalize Signed-off-by: Sjoerd Simons svn path=/trunk/; revision=2191 --- libempathy/empathy-contact.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/libempathy/empathy-contact.c b/libempathy/empathy-contact.c index a48d6990..6c521650 100644 --- a/libempathy/empathy-contact.c +++ b/libempathy/empathy-contact.c @@ -219,6 +219,7 @@ static void contact_finalize (GObject *object) { EmpathyContactPriv *priv; + GList *l; priv = GET_PRIV (object); @@ -228,6 +229,18 @@ contact_finalize (GObject *object) g_free (priv->id); g_free (priv->presence_message); + for (l = priv->ready_callbacks; l != NULL; l = g_list_next (l)) + { + ReadyCbData *d = (ReadyCbData *)l->data; + + if (d->destroy != NULL) + d->destroy (d->user_data); + g_slice_free (ReadyCbData, d); + } + + g_list_free (priv->ready_callbacks); + priv->ready_callbacks = NULL; + if (priv->avatar) empathy_avatar_unref (priv->avatar); @@ -372,8 +385,10 @@ contact_weak_object_notify (gpointer data, GObject *old_object) if (d->destroy != NULL) d->destroy (d->user_data); - priv->ready_callbacks = g_list_delete_link (priv->ready_callbacks, + priv->ready_callbacks = g_list_delete_link (priv->ready_callbacks, l); + + g_slice_free (ReadyCbData, d); } } } @@ -415,6 +430,7 @@ contact_set_ready_flag (EmpathyContact *contact, contact_call_ready_callback (contact, NULL, d); priv->ready_callbacks = g_list_delete_link (priv->ready_callbacks, l); + g_slice_free (ReadyCbData, d); } } } -- 2.39.2