[empathy] Hold a reference to the contact we're adding as an individual
- From: Travis Reitter <treitter src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [empathy] Hold a reference to the contact we're adding as an individual
- Date: Tue, 20 Jul 2010 23:23:17 +0000 (UTC)
commit e25fa2252ec8b46a9584f294d8604dee86ff7a38
Author: Philip Withnall <philip withnall collabora co uk>
Date: Tue Jul 6 14:40:35 2010 +0100
Hold a reference to the contact we're adding as an individual
In empathy_individual_manager_add_from_contact(), we must hold a reference to
the contact we're adding throughout the entire async process, or the TpHandle
which represents the contact could get unreffed and destroyed. This causes
the new contact to get lost.
libempathy/empathy-individual-manager.c | 15 +++++++++++----
1 files changed, 11 insertions(+), 4 deletions(-)
---
diff --git a/libempathy/empathy-individual-manager.c b/libempathy/empathy-individual-manager.c
index db99432..183996a 100644
--- a/libempathy/empathy-individual-manager.c
+++ b/libempathy/empathy-individual-manager.c
@@ -261,18 +261,21 @@ aggregator_add_persona_from_details_cb (GObject *source,
GAsyncResult *result,
gpointer user_data)
{
- EmpathyIndividualManager *self = EMPATHY_INDIVIDUAL_MANAGER (user_data);
- EmpathyIndividualManagerPriv *priv = GET_PRIV (self);
+ FolksIndividualAggregator *aggregator = FOLKS_INDIVIDUAL_AGGREGATOR (source);
+ EmpathyContact *contact = EMPATHY_CONTACT (user_data);
FolksPersona *persona;
GError *error = NULL;
persona = folks_individual_aggregator_add_persona_from_details_finish (
- priv->aggregator, result, &error);
+ aggregator, result, &error);
if (error != NULL)
{
g_warning ("failed to add individual from contact: %s", error->message);
g_clear_error (&error);
}
+
+ /* We can unref the contact now */
+ g_object_unref (contact);
}
void
@@ -289,6 +292,10 @@ empathy_individual_manager_add_from_contact (EmpathyIndividualManager *self,
priv = GET_PRIV (self);
+ /* We need to ref the contact since otherwise its linked TpHandle will be
+ * destroyed. */
+ g_object_ref (contact);
+
DEBUG (G_STRLOC ": adding individual from contact %s (%s)",
empathy_contact_get_id (contact), empathy_contact_get_name (contact));
@@ -301,7 +308,7 @@ empathy_individual_manager_add_from_contact (EmpathyIndividualManager *self,
folks_individual_aggregator_add_persona_from_details (
priv->aggregator, NULL, "telepathy", store_id, details,
- aggregator_add_persona_from_details_cb, self);
+ aggregator_add_persona_from_details_cb, contact);
g_hash_table_destroy (details);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]