[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