]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix memory leak when using GObject properties without accessors
authorJürg Billeter <j@bitron.ch>
Wed, 15 Oct 2008 09:37:31 +0000 (09:37 +0000)
committerJürg Billeter <juergbi@src.gnome.org>
Wed, 15 Oct 2008 09:37:31 +0000 (09:37 +0000)
2008-10-15  Jürg Billeter  <j@bitron.ch>

* gobject/valaccodememberaccessbinding.vala:

Fix memory leak when using GObject properties without accessors

svn path=/trunk/; revision=1838

ChangeLog
gobject/valaccodememberaccessbinding.vala

index 9b456dee8dfcf4a1507d6e84b8f5578ea32ddb1b..8e06de39733e02eccc9bac19c34072d2cc5682ba 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2008-10-15  Jürg Billeter  <j@bitron.ch>
+
+       * gobject/valaccodememberaccessbinding.vala:
+
+       Fix memory leak when using GObject properties without accessors
+
 2008-10-14  Thijs Vermeir  <thijsvermeir@gmail.com>
 
        * vapi/vte.vapi: regenerated (for has_construct_function attribute)
index 8f24ef12b4463f309525201afdb049ef6e1da28a..65f33139a608525c125286c19ef1224e1b789e76 100644 (file)
@@ -206,15 +206,22 @@ public class Vala.CCodeMemberAccessBinding : CCodeExpressionBinding {
                                var ccast = new CCodeFunctionCall (new CCodeIdentifier ("G_OBJECT"));
                                ccast.add_argument (pub_inst);
                                ccall.add_argument (ccast);
-                               
+
                                // property name is second argument of g_object_get
                                ccall.add_argument (prop.get_canonical_cconstant ());
-                               
-                               
+
+                               // g_object_get always returns owned values
+                               var temp_type = expr.value_type.copy ();
+                               temp_type.value_owned = true;
+
                                // we need a temporary variable to save the property value
                                var temp_var = codegen.get_temp_variable (expr.value_type);
                                codegen.temp_vars.insert (0, temp_var);
 
+                               if (codegen.requires_destroy (temp_type)) {
+                                       codegen.temp_ref_vars.insert (0, temp_var);
+                               }
+
                                var ctemp = new CCodeIdentifier (temp_var.name);
                                ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, ctemp));