+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
if (error) {
empathy_debug (DEBUG_DOMAIN, "Failed to get members: %s",
error->message);
+ g_object_unref (group);
return;
}
group);
g_array_free (handles, TRUE);
+ g_object_unref (group);
}
static void
if (error) {
empathy_debug (DEBUG_DOMAIN, "Failed to get local pendings: %s",
error->message);
+ g_object_unref (group);
return;
}
}
g_ptr_array_free (array, TRUE);
g_array_free (handles, TRUE);
+ g_object_unref (group);
}
static void
if (error) {
empathy_debug (DEBUG_DOMAIN, "Failed to get remote pendings: %s",
error->message);
+ g_object_unref (group);
return;
}
group);
g_array_free (handles, TRUE);
+ g_object_unref (group);
}
static void
{
EmpathyTpGroupPriv *priv = GET_PRIV (object);
+ empathy_debug (DEBUG_DOMAIN, "finalize: %p");
+
tp_group_disconnect (EMPATHY_TP_GROUP (object));
if (priv->tp_chan) {
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;
}
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);