From: Jürg Billeter Date: Sat, 31 May 2008 08:12:02 +0000 (+0000) Subject: Fix memory leak when boxing unowned values X-Git-Tag: VALA_0_3_3~50 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=88f0ae41cf0560644b8aadf4e04b4809e9f5c2f8;p=platform%2Fupstream%2Fvala.git Fix memory leak when boxing unowned values 2008-05-31 Jürg Billeter * gobject/valaccodegenerator.vala: Fix memory leak when boxing unowned values svn path=/trunk/; revision=1508 --- 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);