Fix memory leak when boxing unowned values
authorJürg Billeter <j@bitron.ch>
Sat, 31 May 2008 08:12:02 +0000 (08:12 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Sat, 31 May 2008 08:12:02 +0000 (08:12 +0000)
2008-05-31  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodegenerator.vala:

Fix memory leak when boxing unowned values

svn path=/trunk/; revision=1508

ChangeLog
gobject/valaccodegenerator.vala

index eb58cc5..9aa4d63 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,12 @@
 
        * gobject/valaccodegenerator.vala:
 
+       Fix memory leak when boxing unowned values
+
+2008-05-31  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodegenerator.vala:
+
        Free boxed value when unboxing
 
 2008-05-31  Jürg Billeter  <j@bitron.ch>
index 950b914..d4f4a63 100644 (file)
@@ -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);