summaryrefslogtreecommitdiff
path: root/codegen/valagasyncmodule.vala
diff options
context:
space:
mode:
authorJürg Billeter <j@bitron.ch>2012-09-08 07:20:42 +0200
committerJürg Billeter <j@bitron.ch>2012-09-08 07:20:42 +0200
commit590dd689b90909f7ed27c097a7014f7a8cba8dcf (patch)
tree143ac3086d8308d4546ef33c76891eab6e1a91b7 /codegen/valagasyncmodule.vala
parent69189c9204eac311c894fa5eafba649f3881f960 (diff)
downloadvala-590dd689b90909f7ed27c097a7014f7a8cba8dcf.tar.gz
codegen: Fix memory leak with owned delegate parameters in async methods
Fixes bug 683600.
Diffstat (limited to 'codegen/valagasyncmodule.vala')
-rw-r--r--codegen/valagasyncmodule.vala15
1 files 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);