[vala] codegen: Fix memory leak with owned delegate parameters in async methods



commit 590dd689b90909f7ed27c097a7014f7a8cba8dcf
Author: JÃrg Billeter <j bitron ch>
Date:   Sat Sep 8 07:20:42 2012 +0200

    codegen: Fix memory leak with owned delegate parameters in async methods
    
    Fixes bug 683600.

 codegen/valagasyncmodule.vala |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)
---
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index eaa3979..1716b71 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -264,10 +264,19 @@ public class Vala.GAsyncModule : GSignalModule {
 				var old_captured = param.captured;
 				param.captured = false;
 				current_method.coroutine = false;
-				var value = load_parameter (param);
-				if (requires_copy (param_type) && !param.variable_type.value_owned) {
-					value = copy_value (value, param);
+
+				TargetValue value;
+				if (param.variable_type.value_owned) {
+					// do not use load_parameter for reference/ownership transfer
+					// otherwise delegate destroy notify will not be moved
+					value = get_parameter_cvalue (param);
+				} else  {
+					value = load_parameter (param);
+					if (requires_copy (param_type)) {
+						value = copy_value (value, param);
+					}
 				}
+
 				current_method.coroutine = true;
 
 				store_parameter (param, value);



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