[glib] Plug a memory leak in g_simple_async_result_set_op_res_gpointer
- From: Matthias Clasen <matthiasc src gnome org>
- To: svn-commits-list gnome org
- Subject: [glib] Plug a memory leak in g_simple_async_result_set_op_res_gpointer
- Date: Sat, 2 May 2009 23:01:43 -0400 (EDT)
commit 2e4b51aeb3bd5fa1fda52946e2d43fc8e7a28b4e
Author: Matthias Clasen <mclasen redhat com>
Date: Sat May 2 22:59:02 2009 -0400
Plug a memory leak in g_simple_async_result_set_op_res_gpointer
Fixes bug 579272.
---
gio/gsimpleasyncresult.c | 15 +++++++++++++--
1 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/gio/gsimpleasyncresult.c b/gio/gsimpleasyncresult.c
index d5c3e7b..6b73358 100644
--- a/gio/gsimpleasyncresult.c
+++ b/gio/gsimpleasyncresult.c
@@ -145,6 +145,15 @@ G_DEFINE_TYPE_WITH_CODE (GSimpleAsyncResult, g_simple_async_result, G_TYPE_OBJEC
g_simple_async_result_async_result_iface_init))
static void
+clear_op_res (GSimpleAsyncResult *simple)
+{
+ if (simple->destroy_op_res)
+ simple->destroy_op_res (simple->op_res.v_pointer);
+ simple->destroy_op_res = NULL;
+ simple->op_res.v_ssize = 0;
+}
+
+static void
g_simple_async_result_finalize (GObject *object)
{
GSimpleAsyncResult *simple;
@@ -154,8 +163,7 @@ g_simple_async_result_finalize (GObject *object)
if (simple->source_object)
g_object_unref (simple->source_object);
- if (simple->destroy_op_res)
- simple->destroy_op_res (simple->op_res.v_pointer);
+ clear_op_res (simple);
if (simple->error)
g_error_free (simple->error);
@@ -375,6 +383,7 @@ g_simple_async_result_set_op_res_gpointer (GSimpleAsyncResult *simple,
{
g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+ clear_op_res (simple);
simple->op_res.v_pointer = op_res;
simple->destroy_op_res = destroy_op_res;
}
@@ -407,6 +416,7 @@ g_simple_async_result_set_op_res_gssize (GSimpleAsyncResult *simple,
gssize op_res)
{
g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+ clear_op_res (simple);
simple->op_res.v_ssize = op_res;
}
@@ -437,6 +447,7 @@ g_simple_async_result_set_op_res_gboolean (GSimpleAsyncResult *simple,
gboolean op_res)
{
g_return_if_fail (G_IS_SIMPLE_ASYNC_RESULT (simple));
+ clear_op_res (simple);
simple->op_res.v_boolean = !!op_res;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]