[telepathy-mission-control/master] _mcd_client_registry_dup_client_caps: move from McdDispatcher

Simon McVittie simon.mcvittie at collabora.co.uk
Mon Oct 19 07:01:08 PDT 2009


This fixes a minor memory leak introduced in the 5.3 branch (one GPtrArray
per McdConnection made before the McdDispatcher is ready).
---
 src/client-registry.c |   29 ++++++++++++++++++++++-------
 src/client-registry.h |    4 +++-
 src/mcd-dispatcher.c  |   25 +++++++------------------
 3 files changed, 32 insertions(+), 26 deletions(-)

diff --git a/src/client-registry.c b/src/client-registry.c
index 851cdf6..679731e 100644
--- a/src/client-registry.c
+++ b/src/client-registry.c
@@ -115,13 +115,6 @@ _mcd_client_registry_remove (McdClientRegistry *self,
   g_hash_table_remove (self->priv->clients, well_known_name);
 }
 
-guint
-_mcd_client_registry_size (McdClientRegistry *self)
-{
-  g_return_val_if_fail (MCD_IS_CLIENT_REGISTRY (self), 0);
-  return g_hash_table_size (self->priv->clients);
-}
-
 void _mcd_client_registry_init_hash_iter (McdClientRegistry *self,
     GHashTableIter *iter)
 {
@@ -268,3 +261,25 @@ mcd_client_registry_gone_cb (McdClientProxy *client,
 {
   _mcd_client_registry_remove (self, tp_proxy_get_bus_name (client));
 }
+
+GPtrArray *
+_mcd_client_registry_dup_client_caps (McdClientRegistry *self)
+{
+  GPtrArray *vas;
+  GHashTableIter iter;
+  gpointer p;
+
+  g_return_val_if_fail (MCD_IS_CLIENT_REGISTRY (self), NULL);
+
+  vas = g_ptr_array_sized_new (g_hash_table_size (self->priv->clients));
+
+  g_hash_table_iter_init (&iter, self->priv->clients);
+
+  while (g_hash_table_iter_next (&iter, NULL, &p))
+    {
+      g_ptr_array_add (vas,
+          _mcd_client_proxy_dup_handler_capabilities (p));
+    }
+
+  return vas;
+}
diff --git a/src/client-registry.h b/src/client-registry.h
index 172758c..ef3ac02 100644
--- a/src/client-registry.h
+++ b/src/client-registry.h
@@ -69,12 +69,14 @@ G_GNUC_INTERNAL McdClientRegistry *_mcd_client_registry_new (
 G_GNUC_INTERNAL McdClientProxy *_mcd_client_registry_lookup (
     McdClientRegistry *self, const gchar *well_known_name);
 
+G_GNUC_INTERNAL GPtrArray *_mcd_client_registry_dup_client_caps (
+    McdClientRegistry *self);
+
 /* Temporary API for porting */
 
 G_GNUC_INTERNAL McdClientProxy *_mcd_client_registry_add_new (
     McdClientRegistry *self, const gchar *well_known_name,
     const gchar *unique_name_if_known, gboolean activatable);
-G_GNUC_INTERNAL guint _mcd_client_registry_size (McdClientRegistry *self);
 G_GNUC_INTERNAL void _mcd_client_registry_init_hash_iter (
     McdClientRegistry *self, GHashTableIter *iter);
 
diff --git a/src/mcd-dispatcher.c b/src/mcd-dispatcher.c
index 4b25c8b..58ba8fc 100644
--- a/src/mcd-dispatcher.c
+++ b/src/mcd-dispatcher.c
@@ -1876,7 +1876,7 @@ mcd_dispatcher_release_startup_lock (McdDispatcher *self)
         DEBUG ("All initial clients have been inspected");
         self->priv->startup_completed = TRUE;
 
-        vas = _mcd_dispatcher_dup_client_caps (self);
+        vas = _mcd_client_registry_dup_client_caps (self->priv->clients);
 
         g_hash_table_iter_init (&iter, self->priv->connections);
 
@@ -3314,32 +3314,20 @@ mcd_dispatcher_lost_connection (gpointer data,
     g_object_unref (self);
 }
 
+/* FIXME: this only needs to exist because McdConnection calls it in order
+ * to preload caps before Connect */
 GPtrArray *
 _mcd_dispatcher_dup_client_caps (McdDispatcher *self)
 {
-    GPtrArray *vas;
-    GHashTableIter iter;
-    gpointer p;
-
     g_return_val_if_fail (MCD_IS_DISPATCHER (self), NULL);
 
-    vas = g_ptr_array_sized_new (
-        _mcd_client_registry_size (self->priv->clients));
-
+    /* if we're not ready, return NULL to tell the connection not to preload */
     if (!self->priv->startup_completed)
     {
         return NULL;
     }
 
-    _mcd_client_registry_init_hash_iter (self->priv->clients, &iter);
-
-    while (g_hash_table_iter_next (&iter, NULL, &p))
-    {
-        g_ptr_array_add (vas,
-                         _mcd_client_proxy_dup_handler_capabilities (p));
-    }
-
-    return vas;
+    return _mcd_client_registry_dup_client_caps (self->priv->clients);
 }
 
 void
@@ -3357,7 +3345,8 @@ _mcd_dispatcher_add_connection (McdDispatcher *self,
 
     if (self->priv->startup_completed)
     {
-        GPtrArray *vas = _mcd_dispatcher_dup_client_caps (self);
+        GPtrArray *vas =
+            _mcd_client_registry_dup_client_caps (self->priv->clients);
 
         _mcd_connection_start_dispatching (connection, vas);
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list