[Telepathy-commits] [telepathy-gabble/master] Don't leak the streamhosts list

Marco Barisione marco at barisione.org
Tue Jan 6 08:41:25 PST 2009


---
 src/bytestream-socks5.c |   40 ++++++++++++++++++++++++++++++++++------
 1 files changed, 34 insertions(+), 6 deletions(-)

diff --git a/src/bytestream-socks5.c b/src/bytestream-socks5.c
index 54fadd1..9028256 100644
--- a/src/bytestream-socks5.c
+++ b/src/bytestream-socks5.c
@@ -115,6 +115,35 @@ struct _Streamhost
 };
 typedef struct _Streamhost Streamhost;
 
+static Streamhost *
+streamhost_new (const gchar *jid,
+                const gchar *host,
+                guint port)
+{
+  Streamhost *streamhost;
+
+  g_return_val_if_fail (jid != NULL, NULL);
+  g_return_val_if_fail (host != NULL, NULL);
+
+  streamhost = g_new0 (Streamhost, 1);
+  streamhost->jid = g_strdup (jid);
+  streamhost->host = g_strdup (host);
+  streamhost->port = port;
+
+  return streamhost;
+}
+
+static void
+streamhost_free (Streamhost *streamhost)
+{
+  if (streamhost == NULL)
+    return;
+
+  g_free (streamhost->jid);
+  g_free (streamhost->host);
+  g_free (streamhost);
+}
+
 struct _GabbleBytestreamSocks5Private
 {
   GabbleConnection *conn;
@@ -193,6 +222,9 @@ gabble_bytestream_socks5_finalize (GObject *object)
   g_free (priv->peer_resource);
   g_free (priv->peer_jid);
 
+  g_slist_foreach (priv->streamhosts, (GFunc) streamhost_free, NULL);
+  g_slist_free (priv->streamhosts);
+
   G_OBJECT_CLASS (gabble_bytestream_socks5_parent_class)->finalize (object);
 }
 
@@ -723,7 +755,7 @@ socks5_connect_next (GabbleBytestreamSocks5 *self)
 
   g_assert (priv->streamhosts != NULL);
 
-  /* FIXME: free the streamhost */
+  streamhost_free (priv->streamhosts->data);
   priv->streamhosts = g_slist_delete_link (priv->streamhosts, priv->streamhosts);
 
   socks5_connect (self);
@@ -786,11 +818,7 @@ gabble_bytestream_socks5_add_streamhost (GabbleBytestreamSocks5 *self,
   DEBUG ("streamhost with jid %s, host %s and port %d added", jid, host,
       numeric_port);
 
-  streamhost = g_new0 (Streamhost, 1);
-  streamhost->jid = g_strdup (jid);
-  streamhost->host = g_strdup (host);
-  streamhost->port = numeric_port;
-
+  streamhost = streamhost_new (jid, host, numeric_port);
   priv->streamhosts = g_slist_append (priv->streamhosts, streamhost);
 }
 
-- 
1.5.6.5




More information about the Telepathy-commits mailing list