diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | libempathy/empathy-tp-group.c | 14 | ||||
-rw-r--r-- | libempathy/empathy-utils.c | 6 |
3 files changed, 18 insertions, 8 deletions
@@ -1,5 +1,11 @@ 2007-09-29 Xavier Claessens <xclaesse@gmail.com> + * libempathy/empathy-tp-group.c: ref group when async calls are in + flight to avoid destroying the object before receiving the reply. + * libempathy/empathy-utils.c: Unref the group to not leak it. + +2007-09-29 Xavier Claessens <xclaesse@gmail.com> + * libempathy/empathy-contact-factory.c: Refcount ContactFactoryAccountData struct. diff --git a/libempathy/empathy-tp-group.c b/libempathy/empathy-tp-group.c index dbc2d228e..f6f8004cc 100644 --- a/libempathy/empathy-tp-group.c +++ b/libempathy/empathy-tp-group.c @@ -358,6 +358,7 @@ tp_group_get_members_cb (DBusGProxy *proxy, if (error) { empathy_debug (DEBUG_DOMAIN, "Failed to get members: %s", error->message); + g_object_unref (group); return; } @@ -372,6 +373,7 @@ tp_group_get_members_cb (DBusGProxy *proxy, group); g_array_free (handles, TRUE); + g_object_unref (group); } static void @@ -388,6 +390,7 @@ tp_group_get_local_pending_cb (DBusGProxy *proxy, if (error) { empathy_debug (DEBUG_DOMAIN, "Failed to get local pendings: %s", error->message); + g_object_unref (group); return; } @@ -420,6 +423,7 @@ tp_group_get_local_pending_cb (DBusGProxy *proxy, } g_ptr_array_free (array, TRUE); g_array_free (handles, TRUE); + g_object_unref (group); } static void @@ -434,6 +438,7 @@ tp_group_get_remote_pending_cb (DBusGProxy *proxy, if (error) { empathy_debug (DEBUG_DOMAIN, "Failed to get remote pendings: %s", error->message); + g_object_unref (group); return; } @@ -448,6 +453,7 @@ tp_group_get_remote_pending_cb (DBusGProxy *proxy, group); g_array_free (handles, TRUE); + g_object_unref (group); } static void @@ -455,6 +461,8 @@ tp_group_finalize (GObject *object) { EmpathyTpGroupPriv *priv = GET_PRIV (object); + empathy_debug (DEBUG_DOMAIN, "finalize: %p"); + tp_group_disconnect (EMPATHY_TP_GROUP (object)); if (priv->tp_chan) { @@ -590,13 +598,13 @@ empathy_tp_group_new (McAccount *account, tp_chan_iface_group_get_members_async (priv->group_iface, tp_group_get_members_cb, - group); + g_object_ref (group)); tp_chan_iface_group_get_local_pending_members_with_info_async (priv->group_iface, tp_group_get_local_pending_cb, - group); + g_object_ref (group)); tp_chan_iface_group_get_remote_pending_members_async (priv->group_iface, tp_group_get_remote_pending_cb, - group); + g_object_ref (group)); return group; } diff --git a/libempathy/empathy-utils.c b/libempathy/empathy-utils.c index f33d83e48..e90521b05 100644 --- a/libempathy/empathy-utils.c +++ b/libempathy/empathy-utils.c @@ -509,14 +509,10 @@ empathy_call_contact (EmpathyContact *contact) TP_HANDLE_TYPE_NONE, 0); - /* FIXME: group is leaked, we can't unref it directly because - * _add_member is async so we have to wait for it to return before - * finalizing the group. I think EmpathyTpGroup should ref itself - * when it does async calls to avoid finalizing when there is calls - * in fligth like that we could unref it here. */ group = empathy_tp_group_new (account, new_chan); empathy_tp_group_add_member (group, contact, ""); + g_object_unref (group); g_object_unref (mc); g_object_unref (tp_conn); g_object_unref (new_chan); |