]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
codegen: Fix memory leak with owned delegate parameters in async methods
authorJürg Billeter <j@bitron.ch>
Sat, 8 Sep 2012 05:20:42 +0000 (07:20 +0200)
committerJürg Billeter <j@bitron.ch>
Sat, 8 Sep 2012 05:20:42 +0000 (07:20 +0200)
Fixes bug 683600.

codegen/valagasyncmodule.vala

index eaa3979a38a42095fe0bdcac64d14da66e825e78..1716b717a50205cf399a4f42c69df68d1f76a084 100644 (file)
@@ -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);