]> git.0d.be Git - empathy.git/blobdiff - src/empathy-debug-window.c
debug-window: fix leak on all TpDebugClient
[empathy.git] / src / empathy-debug-window.c
index ec59813553754d8d26b34947f91907e629fae274..39d9f3eec358742df70d2c445f655ce22225ee51 100644 (file)
@@ -323,11 +323,16 @@ proxy_invalidated_cb (TpProxy *proxy,
     gpointer user_data)
 {
   EmpathyDebugWindow *self = (EmpathyDebugWindow *) user_data;
-  GtkTreeModel *service_store = GTK_TREE_MODEL (self->priv->service_store);
+  GtkTreeModel *service_store;
   TpProxy *stored_proxy;
   GtkTreeIter iter;
   gboolean valid_iter;
 
+  if (self->priv->service_store == NULL)
+    return;
+
+  service_store = GTK_TREE_MODEL (self->priv->service_store);
+
   /* Proxy has been invalidated so we find and set it to NULL
    * in service store */
   gtk_tree_model_get_iter_first (service_store, &iter);
@@ -343,6 +348,8 @@ proxy_invalidated_cb (TpProxy *proxy,
         gtk_list_store_set (self->priv->service_store, &iter,
             COL_PROXY, NULL,
             -1);
+
+      g_object_unref (stored_proxy);
     }
 
   /* Also, we refresh "All" selection's active buffer since it should not
@@ -385,9 +392,6 @@ debug_window_get_messages_cb (GObject *object,
        * selected service is unable to fetch debug messages */
       if (!tp_strdiff (active_service_name, proxy_service_name))
         debug_window_set_toolbar_sensitivity (self, FALSE);
-
-      /* We created the proxy for GetMessages call. Now destroy it. */
-      tp_clear_object (&debug);
       return;
     }
 
@@ -408,6 +412,8 @@ debug_window_get_messages_cb (GObject *object,
       DEBUG ("Proxy for service: %s was successful in fetching debug"
           " messages. Saving it.", proxy_service_name);
 
+      /* The store will take its own ref on the proxy preventing it to be
+       * destroyed when leaving this callback. */
       gtk_list_store_set (self->priv->service_store, &iter,
           COL_PROXY, debug,
           -1);
@@ -417,8 +423,8 @@ debug_window_get_messages_cb (GObject *object,
   g_free (proxy_service_name);
 
   /* Connect to "invalidated" signal */
-  g_signal_connect (debug, "invalidated",
-      G_CALLBACK (proxy_invalidated_cb), self);
+  g_signal_connect_object (debug, "invalidated",
+      G_CALLBACK (proxy_invalidated_cb), self, 0);
 
  /* Connect to NewDebugMessage */
   tp_g_signal_connect_object (debug, "new-debug-message",
@@ -492,6 +498,8 @@ create_proxy_to_get_messages (EmpathyDebugWindow *self,
   tp_debug_client_get_messages_async (TP_DEBUG_CLIENT (new_proxy),
       debug_window_get_messages_cb, self);
 
+  g_object_unref (new_proxy);
+
 finally:
   g_free (name);
   tp_clear_object (&stored_proxy);