[vala] GAsync: Fix capturing parameters in async methods
- From: Jürg Billeter <juergbi src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] GAsync: Fix capturing parameters in async methods
- Date: Thu, 20 Jan 2011 13:50:39 +0000 (UTC)
commit 899afd89566db287450a4451364aa67c5bfbce7b
Author: Jürg Billeter <j bitron ch>
Date: Thu Jan 20 13:38:15 2011 +0100
GAsync: Fix capturing parameters in async methods
codegen/valagasyncmodule.vala | 6 ++++++
tests/asynchronous/closures.vala | 6 +++---
2 files changed, 9 insertions(+), 3 deletions(-)
---
diff --git a/codegen/valagasyncmodule.vala b/codegen/valagasyncmodule.vala
index d4ce037..9971817 100644
--- a/codegen/valagasyncmodule.vala
+++ b/codegen/valagasyncmodule.vala
@@ -107,7 +107,13 @@ public class Vala.GAsyncModule : GSignalModule {
param_type.value_owned = true;
if (requires_destroy (param_type) && !is_unowned_delegate) {
+ // do not try to access closure blocks
+ bool old_captured = param.captured;
+ param.captured = false;
+
freeblock.add_statement (new CCodeExpressionStatement (get_unref_expression_ (param)));
+
+ param.captured = old_captured;
}
}
}
diff --git a/tests/asynchronous/closures.vala b/tests/asynchronous/closures.vala
index 79b020a..791010c 100644
--- a/tests/asynchronous/closures.vala
+++ b/tests/asynchronous/closures.vala
@@ -2,10 +2,10 @@ delegate void Func ();
MainLoop main_loop;
-async void foo () {
+async void foo (string baz) {
string bar = "hello";
Func foobar = () => {
- bar = "world";
+ bar = baz;
};
foobar ();
assert (bar == "world");
@@ -17,7 +17,7 @@ async void foo () {
}
void main () {
- foo.begin ();
+ foo.begin ("world");
main_loop = new MainLoop (null, false);
main_loop.run ();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]