vala r2438 - in trunk: . gobject



Author: ryanl
Date: Fri Feb 13 00:17:59 2009
New Revision: 2438
URL: http://svn.gnome.org/viewvc/vala?rev=2438&view=rev

Log:
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.



Modified:
   trunk/ChangeLog
   trunk/gobject/valagasyncmodule.vala

Modified: trunk/gobject/valagasyncmodule.vala
==============================================================================
--- trunk/gobject/valagasyncmodule.vala	(original)
+++ trunk/gobject/valagasyncmodule.vala	Fri Feb 13 00:17:59 2009
@@ -43,6 +43,16 @@
 		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"));



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]