]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Bug 571484 – free owned result even if _finish isn't called
authorRyan Lortie <desrt@desrt.ca>
Fri, 13 Feb 2009 00:17:59 +0000 (00:17 +0000)
committerRyan Lortie <ryanl@src.gnome.org>
Fri, 13 Feb 2009 00:17:59 +0000 (00:17 +0000)
2009-02-13  Ryan Lortie  <desrt@desrt.ca>

        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

ChangeLog
gobject/valagasyncmodule.vala

index 2156b25db978342ecb35b5fbfeb559ab2cd8deef..f66e88519125fc907dff82cb6626878c7f813ad8 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2009-02-13  Ryan Lortie  <desrt@desrt.ca>
+
+       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  <j@bitron.ch>
 
        * vala/valaclass.vala:
index cdf4b9b5f7e6ec763aa5d1e40b2a59ed2f4f3e39..fa4fabb890e01a1fd9001b058f28803c5c1035b6 100644 (file)
@@ -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"));