[glib-networking/tls-database] gnutls: Fix memory leak due to circular references
- From: Stefan Walter <stefw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [glib-networking/tls-database] gnutls: Fix memory leak due to circular references
- Date: Tue, 18 Jan 2011 16:23:38 +0000 (UTC)
commit 501a475e71d212b6413c9a64383c4fc78f3dc7c5
Author: Stef Walter <stefw collabora co uk>
Date: Mon Jan 17 21:42:10 2011 -0800
gnutls: Fix memory leak due to circular references
GTlsInputStreamGnutls and GTlsOutputStreamGnutls held references
to GTlsConnectionGnutls, leading to circular reference and the
connection never being freed. Use weak refs.
tls/gnutls/gtlsinputstream-gnutls.c | 8 ++++++--
tls/gnutls/gtlsoutputstream-gnutls.c | 8 ++++++--
2 files changed, 12 insertions(+), 4 deletions(-)
---
diff --git a/tls/gnutls/gtlsinputstream-gnutls.c b/tls/gnutls/gtlsinputstream-gnutls.c
index 0874576..84fb7bc 100644
--- a/tls/gnutls/gtlsinputstream-gnutls.c
+++ b/tls/gnutls/gtlsinputstream-gnutls.c
@@ -43,7 +43,10 @@ g_tls_input_stream_gnutls_finalize (GObject *object)
GTlsInputStreamGnutls *stream = G_TLS_INPUT_STREAM_GNUTLS (object);
if (stream->priv->conn)
- g_object_unref (stream->priv->conn);
+ {
+ g_object_remove_weak_pointer (G_OBJECT (stream->priv->conn),
+ (gpointer*)&stream->priv->conn);
+ }
G_OBJECT_CLASS (g_tls_input_stream_gnutls_parent_class)->finalize (object);
}
@@ -227,6 +230,7 @@ g_tls_input_stream_gnutls_new (GTlsConnectionGnutls *conn)
GTlsInputStreamGnutls *tls_stream;
tls_stream = g_object_new (G_TYPE_TLS_INPUT_STREAM_GNUTLS, NULL);
- tls_stream->priv->conn = g_object_ref (conn);
+ tls_stream->priv->conn = conn;
+ g_object_add_weak_pointer (G_OBJECT (conn), (gpointer*)&tls_stream->priv->conn);
return G_INPUT_STREAM (tls_stream);
}
diff --git a/tls/gnutls/gtlsoutputstream-gnutls.c b/tls/gnutls/gtlsoutputstream-gnutls.c
index e69e445..6e2d378 100644
--- a/tls/gnutls/gtlsoutputstream-gnutls.c
+++ b/tls/gnutls/gtlsoutputstream-gnutls.c
@@ -43,7 +43,10 @@ g_tls_output_stream_gnutls_finalize (GObject *object)
GTlsOutputStreamGnutls *stream = G_TLS_OUTPUT_STREAM_GNUTLS (object);
if (stream->priv->conn)
- g_object_unref (stream->priv->conn);
+ {
+ g_object_remove_weak_pointer (G_OBJECT (stream->priv->conn),
+ (gpointer*)stream->priv->conn);
+ }
G_OBJECT_CLASS (g_tls_output_stream_gnutls_parent_class)->finalize (object);
}
@@ -227,6 +230,7 @@ g_tls_output_stream_gnutls_new (GTlsConnectionGnutls *conn)
GTlsOutputStreamGnutls *tls_stream;
tls_stream = g_object_new (G_TYPE_TLS_OUTPUT_STREAM_GNUTLS, NULL);
- tls_stream->priv->conn = g_object_ref (conn);
+ tls_stream->priv->conn = conn;
+ g_object_add_weak_pointer (G_OBJECT (conn), (gpointer*)&tls_stream->priv->conn);
return G_OUTPUT_STREAM (tls_stream);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]