[Telepathy-commits] [telepathy-salut/master] Capabilities: Fix a leak

Alban Crequy alban.crequy at collabora.co.uk
Thu Feb 26 11:20:13 PST 2009


---
 src/salut-capabilities.h   |    2 +-
 src/salut-presence-cache.c |    2 ++
 src/salut-tubes-manager.c  |   26 ++++++++++++++++++++------
 3 files changed, 23 insertions(+), 7 deletions(-)

diff --git a/src/salut-capabilities.h b/src/salut-capabilities.h
index e35e726..5f2d984 100644
--- a/src/salut-capabilities.h
+++ b/src/salut-capabilities.h
@@ -31,7 +31,7 @@ struct _Feature
     FEATURE_FIXED,
     FEATURE_OPTIONAL,
   } feature_type;
-  const gchar *ns;
+  gchar *ns;
 };
 
 /*
diff --git a/src/salut-presence-cache.c b/src/salut-presence-cache.c
index 4ab5345..dda3401 100644
--- a/src/salut-presence-cache.c
+++ b/src/salut-presence-cache.c
@@ -176,6 +176,8 @@ capability_info_get (SalutPresenceCache *cache, const gchar *uri)
 static void
 capability_info_free (CapabilityInfo *info)
 {
+  salut_presence_cache_free_cache_entry (info->per_channel_manager_caps);
+  info->per_channel_manager_caps = NULL;
   g_slice_free (CapabilityInfo, info);
 }
 
diff --git a/src/salut-tubes-manager.c b/src/salut-tubes-manager.c
index 715ca8c..f5bf8d6 100644
--- a/src/salut-tubes-manager.c
+++ b/src/salut-tubes-manager.c
@@ -130,6 +130,20 @@ const Feature tube_feature = {
 };
 
 static void
+salut_private_tubes_factory_free_feat (gpointer data)
+{
+  Feature *feat = (Feature *)data;
+
+  if (feat == NULL)
+    return;
+
+  if (feat->ns != NULL)
+    g_free (feat->ns);
+
+  g_free (feat);
+}
+
+static void
 salut_tubes_manager_init (SalutTubesManager *self)
 {
   SalutTubesManagerPrivate *priv = G_TYPE_INSTANCE_GET_PRIVATE (self,
@@ -1276,9 +1290,9 @@ salut_private_tubes_factory_parse_caps (
 
   caps = g_new0 (TubesCapabilities, 1);
   caps->stream_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-      g_free, g_free);
+      g_free, salut_private_tubes_factory_free_feat);
   caps->dbus_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-      g_free, g_free);
+      g_free, salut_private_tubes_factory_free_feat);
 
   gibber_xmpp_node_each_child (node, _parse_caps_item, caps);
 
@@ -1315,12 +1329,12 @@ salut_private_tubes_factory_copy_caps (
   TubesCapabilities *caps_out = g_new0 (TubesCapabilities, 1);
 
   caps_out->stream_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-      g_free, g_free);
+      g_free, salut_private_tubes_factory_free_feat);
   g_hash_table_foreach (caps_in->stream_tube_caps, copy_caps_helper,
       caps_out->stream_tube_caps);
 
   caps_out->dbus_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-      g_free, g_free);
+      g_free, salut_private_tubes_factory_free_feat);
   g_hash_table_foreach (caps_in->dbus_tube_caps, copy_caps_helper,
       caps_out->dbus_tube_caps);
 
@@ -1469,9 +1483,9 @@ salut_private_tubes_factory_add_cap (SalutCapsChannelManager *manager,
     {
       caps = g_new0 (TubesCapabilities, 1);
       caps->stream_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-          g_free, g_free);
+          g_free, salut_private_tubes_factory_free_feat);
       caps->dbus_tube_caps = g_hash_table_new_full (g_str_hash, g_str_equal,
-          g_free, g_free);
+          g_free, salut_private_tubes_factory_free_feat);
       g_hash_table_insert (*per_channel_manager_caps, manager, caps);
     }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list