From: Ryan Lortie Date: Fri, 13 Feb 2009 00:17:59 +0000 (+0000) Subject: Bug 571484 – free owned result even if _finish isn't called X-Git-Tag: 0.5.7~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=e2a8ddb140d6f86f23e91eb98946d3d3873deacc;p=thirdparty%2Fvala.git Bug 571484 – free owned result even if _finish isn't called 2009-02-13 Ryan Lortie Bug 571484 – free owned result even if _finish isn't called * gobject/valagasyncmodule.vala: Emit code to free the result in the result in the event that _finish was not called. svn path=/trunk/; revision=2438 --- diff --git a/ChangeLog b/ChangeLog index 2156b25db..f66e88519 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2009-02-13 Ryan Lortie + + Bug 571484 – free owned result even if _finish isn't called + + * gobject/valagasyncmodule.vala: + + Emit code to free the result in the result in the event that _finish + was not called. + 2009-02-12 Jürg Billeter * vala/valaclass.vala: diff --git a/gobject/valagasyncmodule.vala b/gobject/valagasyncmodule.vala index cdf4b9b5f..fa4fabb89 100644 --- a/gobject/valagasyncmodule.vala +++ b/gobject/valagasyncmodule.vala @@ -43,6 +43,16 @@ internal class Vala.GAsyncModule : GSignalModule { datadecl.add_declarator (new CCodeVariableDeclarator ("data", new CCodeIdentifier ("_data"))); freeblock.add_statement (datadecl); + if (requires_destroy (m.return_type)) { + /* this is very evil. */ + var v = new LocalVariable (m.return_type, "result"); + var ma = new MemberAccess.simple ("result"); + ma.symbol_reference = v; + current_method = m; + freeblock.add_statement (new CCodeExpressionStatement (get_unref_expression (get_variable_cexpression ("result"), m.return_type, ma))); + current_method = null; + } + var freecall = new CCodeFunctionCall (new CCodeIdentifier ("g_slice_free")); freecall.add_argument (new CCodeIdentifier (dataname)); freecall.add_argument (new CCodeIdentifier ("data"));