From 590dd689b90909f7ed27c097a7014f7a8cba8dcf Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=BCrg=20Billeter?= Date: Sat, 8 Sep 2012 07:20:42 +0200 Subject: [PATCH] codegen: Fix memory leak with owned delegate parameters in async methods Fixes bug 683600. --- codegen/valagasyncmodule.vala | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala index eaa3979a3..1716b717a 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); -- 2.47.2