[Telepathy-commits] [telepathy-gabble/master] src/private-tubes-factory.c: Fix: do not send the NewChannels signal twice

Alban Crequy alban.crequy at collabora.co.uk
Fri Dec 5 09:42:43 PST 2008


---
 src/private-tubes-factory.c |   33 +++++++++++++++++++--------------
 1 files changed, 19 insertions(+), 14 deletions(-)

diff --git a/src/private-tubes-factory.c b/src/private-tubes-factory.c
index 2df12e4..7c2c07e 100644
--- a/src/private-tubes-factory.c
+++ b/src/private-tubes-factory.c
@@ -48,7 +48,8 @@
 #include "util.h"
 
 static GabbleTubesChannel *new_tubes_channel (GabblePrivateTubesFactory *fac,
-    TpHandle handle, TpHandle initiator, gpointer request_token);
+    TpHandle handle, TpHandle initiator, gpointer request_token,
+    gboolean send_new_channel_signal);
 
 static void tubes_channel_closed_cb (GabbleTubesChannel *chan,
     gpointer user_data);
@@ -309,13 +310,13 @@ static GabbleTubesChannel *
 new_tubes_channel (GabblePrivateTubesFactory *fac,
                    TpHandle handle,
                    TpHandle initiator,
-                   gpointer request_token)
+                   gpointer request_token,
+                   gboolean send_new_channel_signal)
 {
   GabblePrivateTubesFactoryPrivate *priv;
   TpBaseConnection *conn;
   GabbleTubesChannel *chan;
   char *object_path;
-  GSList *request_tokens;
 
   g_assert (GABBLE_IS_PRIVATE_TUBES_FACTORY (fac));
   g_assert (handle != 0);
@@ -343,15 +344,19 @@ new_tubes_channel (GabblePrivateTubesFactory *fac,
 
   g_free (object_path);
 
-  if (request_token != NULL)
-    request_tokens = g_slist_prepend (NULL, request_token);
-  else
-    request_tokens = NULL;
+  if (send_new_channel_signal)
+    {
+      GSList *request_tokens;
+      if (request_token != NULL)
+        request_tokens = g_slist_prepend (NULL, request_token);
+      else
+        request_tokens = NULL;
 
-  tp_channel_manager_emit_new_channel (fac,
-      TP_EXPORTABLE_CHANNEL (chan), request_tokens);
+      tp_channel_manager_emit_new_channel (fac,
+          TP_EXPORTABLE_CHANNEL (chan), request_tokens);
 
-  g_slist_free (request_tokens);
+      g_slist_free (request_tokens);
+    }
 
   return chan;
 }
@@ -852,7 +857,7 @@ gabble_private_tubes_factory_handle_si_tube_request (
   chan = g_hash_table_lookup (priv->channels, GUINT_TO_POINTER (handle));
   if (chan == NULL)
     {
-      chan = new_tubes_channel (self, handle, handle, NULL);
+      chan = new_tubes_channel (self, handle, handle, NULL, TRUE);
 
       /* FIXME: Should we close the channel if the request is not properly
        * handled by the newly created channel ? */
@@ -939,7 +944,7 @@ private_tubes_factory_msg_tube_cb (LmMessageHandler *handler,
         {
           /* We create the tubes channel only if the message is a new tube
            * offer */
-          chan = new_tubes_channel (self, handle, handle, NULL);
+          chan = new_tubes_channel (self, handle, handle, NULL, TRUE);
         }
       else
         {
@@ -1154,7 +1159,7 @@ gabble_private_tubes_factory_requestotron (GabblePrivateTubesFactory *self,
       if (channel == NULL)
         {
           channel = new_tubes_channel (self, handle, base_conn->self_handle,
-              request_token);
+              request_token, TRUE);
           return TRUE;
         }
 
@@ -1181,7 +1186,7 @@ gabble_private_tubes_factory_requestotron (GabblePrivateTubesFactory *self,
           /* Don't give the request_token to new_tubes_channel() because we
            * must emit NewChannels with 2 channels together */
           channel = new_tubes_channel (self, handle, base_conn->self_handle,
-              NULL);
+              NULL, FALSE);
         }
       g_assert (channel != NULL);
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list