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

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


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

diff --git a/src/capabilities.h b/src/capabilities.h
index db8ede5..00ca15e 100644
--- a/src/capabilities.h
+++ b/src/capabilities.h
@@ -44,7 +44,7 @@ struct _Feature
     FEATURE_OPTIONAL,
     FEATURE_BUNDLE_COMPAT   /* just for voice-v1 */
   } feature_type;
-  const gchar *ns;
+  gchar *ns;
   GabblePresenceCapabilities caps;
 };
 
diff --git a/src/presence-cache.c b/src/presence-cache.c
index 9cd8602..ab60fa1 100644
--- a/src/presence-cache.c
+++ b/src/presence-cache.c
@@ -244,6 +244,8 @@ capability_info_get (GabblePresenceCache *cache, const gchar *node)
 static void
 capability_info_free (CapabilityInfo *info)
 {
+  gabble_presence_cache_free_cache_entry (info->per_channel_manager_caps);
+  info->per_channel_manager_caps = NULL;
   tp_intset_destroy (info->guys);
   g_slice_free (CapabilityInfo, info);
 }
diff --git a/src/private-tubes-factory.c b/src/private-tubes-factory.c
index b805f71..93ebfdf 100644
--- a/src/private-tubes-factory.c
+++ b/src/private-tubes-factory.c
@@ -536,6 +536,20 @@ gabble_private_tubes_factory_get_feature_list (
     }
 }
 
+static void
+gabble_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 gpointer
 gabble_private_tubes_factory_parse_caps (
     GabbleCapsChannelManager *manager,
@@ -546,9 +560,9 @@ gabble_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, gabble_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, gabble_private_tubes_factory_free_feat);
 
   for (child = children; NULL != child; child = child->next)
     {
@@ -616,12 +630,12 @@ gabble_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, gabble_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, gabble_private_tubes_factory_free_feat);
   g_hash_table_foreach (caps_in->dbus_tube_caps, copy_caps_helper,
       caps_out->dbus_tube_caps);
 
@@ -755,9 +769,9 @@ gabble_private_tubes_factory_add_cap (GabbleCapsChannelManager *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, gabble_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, gabble_private_tubes_factory_free_feat);
       g_hash_table_insert (presence->per_channel_manager_caps, manager, caps);
     }
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list