From 88f0ae41cf0560644b8aadf4e04b4809e9f5c2f8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sat, 31 May 2008 08:12:02 +0000 Subject: [PATCH] Fix memory leak when boxing unowned values MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit 2008-05-31 Jürg Billeter * gobject/valaccodegenerator.vala: Fix memory leak when boxing unowned values svn path=/trunk/; revision=1508 --- ChangeLog | 6 ++++++ gobject/valaccodegenerator.vala | 24 +----------------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/ChangeLog b/ChangeLog index eb58cc5..9aa4d63 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,12 @@ * gobject/valaccodegenerator.vala: + Fix memory leak when boxing unowned values + +2008-05-31 Jürg Billeter + + * gobject/valaccodegenerator.vala: + Free boxed value when unboxing 2008-05-31 Jürg Billeter diff --git a/gobject/valaccodegenerator.vala b/gobject/valaccodegenerator.vala index 950b914..d4f4a63 100644 --- a/gobject/valaccodegenerator.vala +++ b/gobject/valaccodegenerator.vala @@ -3484,28 +3484,6 @@ public class Vala.CCodeGenerator : CodeGenerator { ccomma.append_expression (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (get_variable_cname (decl.name)))); cexpr = ccomma; } - - if (!target_type.value_owned) { - // reference to stack value - } else { - // heap-allocated - string dup_func = expression_type.data_type.get_dup_function (); - if (dup_func == null) { - // default to g_memdup - var ccall = new CCodeFunctionCall (new CCodeIdentifier ("g_memdup")); - ccall.add_argument (cexpr); - var csizeof = new CCodeFunctionCall (new CCodeIdentifier ("sizeof")); - csizeof.add_argument (new CCodeIdentifier (expression_type.data_type.get_cname ())); - ccall.add_argument (csizeof); - - cexpr = ccall; - } else { - var ccall = new CCodeFunctionCall (new CCodeIdentifier (dup_func)); - ccall.add_argument (cexpr); - - cexpr = ccall; - } - } } else if (unboxing) { // unbox value @@ -3520,7 +3498,7 @@ public class Vala.CCodeGenerator : CodeGenerator { cexpr = convert_to_generic_pointer (cexpr, expression_type); } - if (target_type.value_owned && !expression_type.value_owned) { + if (target_type.value_owned && (!expression_type.value_owned || boxing || unboxing)) { // need to copy value if (requires_copy (target_type) && !(expression_type is NullType)) { cexpr = get_ref_cexpression (target_type, cexpr, expr, expression_type); -- 2.7.4