From: Jürg Billeter Date: Sat, 8 Sep 2012 05:20:42 +0000 (+0200) Subject: codegen: Fix memory leak with owned delegate parameters in async methods X-Git-Tag: 0.17.7~12 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=590dd689b90909f7ed27c097a7014f7a8cba8dcf;p=thirdparty%2Fvala.git codegen: Fix memory leak with owned delegate parameters in async methods Fixes bug 683600. --- 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);