[empathy/gnome-2-28] empathy-dispatch-operation: ensure that the operation stays alive while tp_connection_call_when_read



commit 691ca3a025341d1ccff5a6058961cd4cdad8d0f1
Author: Guillaume Desmottes <guillaume desmottes collabora co uk>
Date:   Tue Nov 3 16:33:50 2009 +0000

    empathy-dispatch-operation: ensure that the operation stays alive while tp_connection_call_when_ready is running (#600551)

 libempathy/empathy-dispatch-operation.c |   12 ++++++++++++
 1 files changed, 12 insertions(+), 0 deletions(-)
---
diff --git a/libempathy/empathy-dispatch-operation.c b/libempathy/empathy-dispatch-operation.c
index d7afcbe..11ad523 100644
--- a/libempathy/empathy-dispatch-operation.c
+++ b/libempathy/empathy-dispatch-operation.c
@@ -210,6 +210,13 @@ dispatch_operation_connection_ready (TpConnection *connection,
   EmpathyTpContactFactory *factory;
   TpHandle handle;
 
+  if (error != NULL)
+    goto out;
+
+  if (priv->status >= EMPATHY_DISPATCHER_OPERATION_STATE_CLAIMED)
+    /* no point to get more information */
+    goto out;
+
   handle = tp_channel_get_handle (priv->channel, NULL);
 
   factory = empathy_tp_contact_factory_dup_singleton (priv->connection);
@@ -218,6 +225,8 @@ dispatch_operation_connection_ready (TpConnection *connection,
       dispatcher_operation_got_contact_cb, NULL, NULL, G_OBJECT (self));
 
   g_object_unref (factory);
+out:
+  g_object_unref (self);
 }
 
 static void
@@ -239,6 +248,9 @@ empathy_dispatch_operation_constructed (GObject *object)
 
   if (handle_type == TP_HANDLE_TYPE_CONTACT && priv->contact == NULL)
     {
+      /* Ensure to keep the self object alive while the call_when_ready is
+       * running */
+      g_object_ref (self);
       tp_connection_call_when_ready (priv->connection,
           dispatch_operation_connection_ready, object);
       return;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]