From: Jürg Billeter Date: Wed, 15 Oct 2008 09:37:31 +0000 (+0000) Subject: Fix memory leak when using GObject properties without accessors X-Git-Tag: VALA_0_4_0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ac3119bb94b45f381f1165ab761a68c1d1dcd68b;p=thirdparty%2Fvala.git Fix memory leak when using GObject properties without accessors 2008-10-15 Jürg Billeter * gobject/valaccodememberaccessbinding.vala: Fix memory leak when using GObject properties without accessors svn path=/trunk/; revision=1838 --- diff --git a/ChangeLog b/ChangeLog index 9b456dee8..8e06de397 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2008-10-15 Jürg Billeter + + * gobject/valaccodememberaccessbinding.vala: + + Fix memory leak when using GObject properties without accessors + 2008-10-14 Thijs Vermeir * vapi/vte.vapi: regenerated (for has_construct_function attribute) diff --git a/gobject/valaccodememberaccessbinding.vala b/gobject/valaccodememberaccessbinding.vala index 8f24ef12b..65f33139a 100644 --- a/gobject/valaccodememberaccessbinding.vala +++ b/gobject/valaccodememberaccessbinding.vala @@ -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));