[Telepathy-commits] [telepathy-gabble/master] GabbleRoomlistManager: disconnect from status-changed signal when appropriate

Simon McVittie simon.mcvittie at collabora.co.uk
Thu Aug 21 06:13:19 PDT 2008


---
 src/roomlist-manager.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/src/roomlist-manager.c b/src/roomlist-manager.c
index 722ab87..7012e5d 100644
--- a/src/roomlist-manager.c
+++ b/src/roomlist-manager.c
@@ -60,6 +60,7 @@ enum
 struct _GabbleRoomlistManagerPrivate
 {
   GabbleConnection *conn;
+  gulong status_changed_id;
 
   guint next_channel_number;
   GPtrArray *channels;
@@ -84,6 +85,13 @@ gabble_roomlist_manager_close_all (GabbleRoomlistManager *self)
 {
   DEBUG ("%p", self);
 
+  if (self->priv->status_changed_id != 0)
+    {
+      g_signal_handler_disconnect (self->priv->conn,
+          self->priv->status_changed_id);
+      self->priv->status_changed_id = 0;
+    }
+
   if (self->priv->channels != NULL)
     {
       GPtrArray *tmp = self->priv->channels;
@@ -200,10 +208,8 @@ gabble_roomlist_manager_constructed (GObject *object)
   if (chain_up != NULL)
     chain_up (object);
 
-  /* conn is guaranteed to live longer than the manager, so this
-   * never needs disconnecting */
-  g_signal_connect (self->priv->conn, "status-changed",
-      (GCallback) connection_status_changed_cb, self);
+  self->priv->status_changed_id = g_signal_connect (self->priv->conn,
+      "status-changed", (GCallback) connection_status_changed_cb, object);
 }
 
 
-- 
1.5.6.3



More information about the Telepathy-commits mailing list