telepathy-mission-control: _mcd_client_registry_list_possible_handlers: only take one channel

Simon McVittie smcv at kemper.freedesktop.org
Tue Jul 31 03:41:20 PDT 2012


Module: telepathy-mission-control
Branch: master
Commit: b015e6c79f59bbb8cc78405dc06aa0e9ee27ed80
URL:    http://cgit.freedesktop.org/telepathy/telepathy-mission-control/commit/?id=b015e6c79f59bbb8cc78405dc06aa0e9ee27ed80

Author: Simon McVittie <simon.mcvittie at collabora.co.uk>
Date:   Tue May 15 11:41:29 2012 +0100

_mcd_client_registry_list_possible_handlers: only take one channel

https://bugs.freedesktop.org/show_bug.cgi?id=52305

---

 src/client-registry.c |   33 +++++++++------------------------
 src/client-registry.h |    2 +-
 src/mcd-dispatcher.c  |   10 ++--------
 3 files changed, 12 insertions(+), 33 deletions(-)

diff --git a/src/client-registry.c b/src/client-registry.c
index 3e01a66..acc65e7 100644
--- a/src/client-registry.c
+++ b/src/client-registry.c
@@ -604,11 +604,10 @@ GList *
 _mcd_client_registry_list_possible_handlers (McdClientRegistry *self,
     const gchar *preferred_handler,
     GHashTable *request_props,
-    const GList *channels,
+    TpChannel *channel,
     const gchar *must_have_unique_name)
 {
   GList *handlers = NULL;
-  const GList *iter;
   GList *handlers_iter;
   GHashTableIter client_iter;
   gpointer client_p;
@@ -618,7 +617,8 @@ _mcd_client_registry_list_possible_handlers (McdClientRegistry *self,
   while (g_hash_table_iter_next (&client_iter, NULL, &client_p))
     {
       McdClientProxy *client = MCD_CLIENT_PROXY (client_p);
-      gsize total_quality = 0;
+      GHashTable *properties;
+      gsize quality;
 
       if (must_have_unique_name != NULL &&
           tp_strdiff (must_have_unique_name,
@@ -636,48 +636,33 @@ _mcd_client_registry_list_possible_handlers (McdClientRegistry *self,
             continue;
         }
 
-      if (channels == NULL)
+      if (channel == NULL)
         {
-          /* We don't know any channels' properties (the next loop will not
+          /* We don't know the channel's properties (the next part will not
            * execute), so we must work out the quality of match from the
            * channel request. We can assume that the request will return one
            * channel, with the requested properties, plus Requested == TRUE.
            */
           g_assert (request_props != NULL);
-          total_quality = _mcd_client_match_filters (request_props,
+          quality = _mcd_client_match_filters (request_props,
               _mcd_client_proxy_get_handler_filters (client), TRUE);
         }
-
-      for (iter = channels; iter != NULL; iter = iter->next)
+      else
         {
-          TpChannel *channel = iter->data;
-          GHashTable *properties;
-          guint quality;
-
           g_assert (TP_IS_CHANNEL (channel));
           properties = tp_channel_borrow_immutable_properties (channel);
 
           quality = _mcd_client_match_filters (properties,
               _mcd_client_proxy_get_handler_filters (client), FALSE);
-
-          if (quality == 0)
-            {
-              total_quality = 0;
-              break;
-            }
-          else
-            {
-              total_quality += quality;
-            }
         }
 
-      if (total_quality > 0)
+      if (quality > 0)
         {
           PossibleHandler *ph = g_slice_new0 (PossibleHandler);
 
           ph->client = client;
           ph->bypass = _mcd_client_proxy_get_bypass_approval (client);
-          ph->quality = total_quality;
+          ph->quality = quality;
 
           handlers = g_list_prepend (handlers, ph);
         }
diff --git a/src/client-registry.h b/src/client-registry.h
index 88f1956..ec2e167 100644
--- a/src/client-registry.h
+++ b/src/client-registry.h
@@ -82,7 +82,7 @@ G_GNUC_INTERNAL void _mcd_client_registry_init_hash_iter (
 
 G_GNUC_INTERNAL GList *_mcd_client_registry_list_possible_handlers (
     McdClientRegistry *self, const gchar *preferred_handler,
-    GHashTable *request_props, const GList *channels,
+    GHashTable *request_props, TpChannel *channel,
     const gchar *must_have_unique_name);
 
 G_END_DECLS
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 1807f20..88b5a47 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -181,19 +181,16 @@ mcd_dispatcher_dup_possible_handlers (McdDispatcher *self,
                                       TpChannel *channel,
                                       const gchar *must_have_unique_name)
 {
-    GList *channels = g_list_prepend (NULL, channel);
     GList *handlers = _mcd_client_registry_list_possible_handlers (
         self->priv->clients,
         request != NULL ? _mcd_request_get_preferred_handler (request) : NULL,
         request != NULL ? _mcd_request_get_properties (request) : NULL,
-        channels, must_have_unique_name);
+        channel, must_have_unique_name);
     guint n_handlers = g_list_length (handlers);
     guint i;
     GStrv ret;
     const GList *iter;
 
-    g_list_free (channels);
-
     if (handlers == NULL)
         return NULL;
 
@@ -549,7 +546,6 @@ _mcd_dispatcher_lookup_handler (McdDispatcher *self,
     if (handler == NULL)
     {
         GList *possible_handlers;
-        GList *channels;
 
         /* Failing that, maybe the Handler it was dispatched to was temporary;
          * try to pick another Handler that can deal with it, on the same
@@ -557,12 +553,11 @@ _mcd_dispatcher_lookup_handler (McdDispatcher *self,
          * It can also happen in the case an Observer/Approver Claimed the
          * channel; in that case we did not get its handler well known name.
          */
-        channels = g_list_prepend (NULL, channel);
         possible_handlers = _mcd_client_registry_list_possible_handlers (
                 self->priv->clients,
                 request != NULL ? _mcd_request_get_preferred_handler (request) : NULL,
                 request != NULL ? _mcd_request_get_properties (request) : NULL,
-                channels, unique_name);
+                channel, unique_name);
 
         if (possible_handlers != NULL)
         {
@@ -579,7 +574,6 @@ _mcd_dispatcher_lookup_handler (McdDispatcher *self,
                    unique_name, object_path);
         }
 
-        g_list_free (channels);
         g_list_free (possible_handlers);
     }
 



More information about the telepathy-commits mailing list