[next] telepathy-salut: Delay ChannelClosed until internal data structures have been updated

Simon McVittie smcv at kemper.freedesktop.org
Wed May 7 02:18:38 PDT 2014


Module: telepathy-salut
Branch: next
Commit: 0acd710674f73f5add940e6b08f78e06c0977c5b
URL:    http://cgit.freedesktop.org/telepathy/telepathy-salut/commit/?id=0acd710674f73f5add940e6b08f78e06c0977c5b

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue Apr 22 16:49:19 2014 +0100

Delay ChannelClosed until internal data structures have been updated

---

 src/muc-manager.c      |   16 ++++++++++------
 src/roomlist-manager.c |    6 +++---
 src/tubes-manager.c    |    6 +++---
 3 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/src/muc-manager.c b/src/muc-manager.c
index bedf9a6..db2b963 100644
--- a/src/muc-manager.c
+++ b/src/muc-manager.c
@@ -419,17 +419,15 @@ muc_channel_closed_cb (SalutMucChannel *chan,
   /* channel is actually reappearing, announce it */
   if (tp_base_channel_is_respawning (base))
     {
+      if (tp_base_channel_is_registered (base))
+        tp_channel_manager_emit_channel_closed_for_object (
+            TP_CHANNEL_MANAGER (self), base);
+
       tp_channel_manager_emit_new_channel (TP_CHANNEL_MANAGER (self),
           base, NULL);
       return;
     }
 
-  if (tp_base_channel_is_registered (base))
-    {
-      tp_channel_manager_emit_channel_closed_for_object (
-          TP_CHANNEL_MANAGER (self), base);
-    }
-
   if (tp_base_channel_is_destroyed (base)
       && priv->text_channels)
     {
@@ -438,6 +436,12 @@ muc_channel_closed_cb (SalutMucChannel *chan,
 
       g_hash_table_remove (priv->text_channels, GUINT_TO_POINTER (handle));
     }
+
+  if (tp_base_channel_is_registered (base))
+    {
+      tp_channel_manager_emit_channel_closed_for_object (
+          TP_CHANNEL_MANAGER (self), base);
+    }
 }
 
 static void
diff --git a/src/roomlist-manager.c b/src/roomlist-manager.c
index a94c079..1d68e9f 100644
--- a/src/roomlist-manager.c
+++ b/src/roomlist-manager.c
@@ -325,15 +325,15 @@ roomlist_channel_closed_cb (SalutRoomlistChannel *channel,
   SalutRoomlistManagerPrivate *priv =
     SALUT_ROOMLIST_MANAGER_GET_PRIVATE (self);
 
-  tp_channel_manager_emit_channel_closed_for_object (TP_CHANNEL_MANAGER (self),
-      TP_BASE_CHANNEL (channel));
-
   if (priv->roomlist_channels != NULL)
     {
       priv->roomlist_channels = g_slist_remove (priv->roomlist_channels,
           channel);
       g_object_unref (channel);
     }
+
+  tp_channel_manager_emit_channel_closed_for_object (TP_CHANNEL_MANAGER (self),
+      TP_BASE_CHANNEL (channel));
 }
 
 
diff --git a/src/tubes-manager.c b/src/tubes-manager.c
index 91b9e26..62485f6 100644
--- a/src/tubes-manager.c
+++ b/src/tubes-manager.c
@@ -679,11 +679,11 @@ channel_closed_cb (SalutTubeIface *tube,
       "id", &id,
       NULL);
 
-  tp_channel_manager_emit_channel_closed_for_object (TP_CHANNEL_MANAGER (self),
-      TP_BASE_CHANNEL (tube));
-
   if (priv->tubes != NULL)
     g_hash_table_remove (priv->tubes, GUINT_TO_POINTER (id));
+
+  tp_channel_manager_emit_channel_closed_for_object (TP_CHANNEL_MANAGER (self),
+      TP_BASE_CHANNEL (tube));
 }
 
 static guint64



More information about the telepathy-commits mailing list