[telepathy-gabble/master] Don't leak Jingle content and session names
Will Thompson
will.thompson at collabora.co.uk
Wed Apr 15 12:04:28 PDT 2009
---
src/jingle-factory.c | 20 +++++++++++---------
src/jingle-session.c | 2 ++
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/jingle-factory.c b/src/jingle-factory.c
index ff71c3e..1b9e11e 100644
--- a/src/jingle-factory.c
+++ b/src/jingle-factory.c
@@ -665,17 +665,16 @@ get_unique_sid (GabbleJingleFactory *factory)
return sid;
}
+/* Takes ownership of @sid. */
static void
register_session (GabbleJingleFactory *factory,
- const gchar *sid,
+ gchar *sid,
GabbleJingleSession *sess)
{
GabbleJingleFactoryPrivate *priv = factory->priv;
- gchar *sid_copy;
- sid_copy = g_strdup (sid);
- g_assert (g_hash_table_lookup (priv->sessions, sid_copy) == NULL);
- g_hash_table_insert (priv->sessions, sid_copy, sess);
+ g_assert (g_hash_table_lookup (priv->sessions, sid) == NULL);
+ g_hash_table_insert (priv->sessions, sid, sess);
}
void
@@ -763,25 +762,28 @@ create_session (GabbleJingleFactory *fac,
GabbleJingleFactoryPrivate *priv = fac->priv;
GabbleJingleSession *sess;
gboolean local_initiator;
+ gchar *sid_;
if (sid != NULL)
{
g_assert (NULL == g_hash_table_lookup (priv->sessions, sid));
local_initiator = FALSE;
+ sid_ = g_strdup (sid);
}
else
{
- sid = get_unique_sid (fac);
+ sid_ = get_unique_sid (fac);
local_initiator = TRUE;
}
- sess = gabble_jingle_session_new (priv->conn, sid, local_initiator, peer,
+ sess = gabble_jingle_session_new (priv->conn, sid_, local_initiator, peer,
peer_resource);
g_signal_connect (sess, "terminated", (GCallback) session_terminated_cb, fac);
- DEBUG ("new session %s @ %p created", sid, sess);
- register_session (fac, sid, sess);
+ DEBUG ("new session %s @ %p created", sid_, sess);
+ /* register_session takes ownership of sid_. */
+ register_session (fac, sid_, sess);
return sess;
}
diff --git a/src/jingle-session.c b/src/jingle-session.c
index 8ab9a13..9f41de1 100644
--- a/src/jingle-session.c
+++ b/src/jingle-session.c
@@ -1813,6 +1813,8 @@ gabble_jingle_session_add_content (GabbleJingleSession *sess, JingleMediaType mt
c = create_content (sess, content_type, mtype,
content_ns, transport_ns, name, NULL, NULL);
+ g_free (name);
+
return c;
}
--
1.5.6.5
More information about the telepathy-commits
mailing list