[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