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);
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
* 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;
}
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);
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",
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);