summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuca Bruno <lucabru@src.gnome.org>2015-01-12 15:09:14 +0100
committerLuca Bruno <lucabru@src.gnome.org>2015-01-12 15:11:02 +0100
commit71fa41b7cf2a302b8d627a4198b265e4f2305b8d (patch)
tree1e549701325aa88914a1dfac4c648774b8491aa9
parent6b672ea93e26f916b25c0346e575e992ad15d135 (diff)
downloadvala-71fa41b7cf2a302b8d627a4198b265e4f2305b8d.tar.gz
codegen: Fix detailed signal disconnect in async methods
Fixes bug 742621
-rw-r--r--codegen/valagsignalmodule.vala2
-rw-r--r--tests/Makefile.am1
-rw-r--r--tests/asynchronous/bug742621.vala15
3 files changed, 17 insertions, 1 deletions
diff --git a/codegen/valagsignalmodule.vala b/codegen/valagsignalmodule.vala
index 3f8e1ea1e..eff678162 100644
--- a/codegen/valagsignalmodule.vala
+++ b/codegen/valagsignalmodule.vala
@@ -618,7 +618,7 @@ public class Vala.GSignalModule : GObjectModule {
} else {
detail_temp_decl = get_temp_variable (gquark_type);
emit_temp_var (detail_temp_decl);
- parse_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier (detail_temp_decl.name)));
+ parse_call.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, get_variable_cexpression (detail_temp_decl.name)));
parse_call.add_argument (new CCodeConstant ("TRUE"));
}
ccode.add_expression (parse_call);
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 85ca6b351..e505699c7 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -185,6 +185,7 @@ TESTS = \
asynchronous/bug654336.vala \
asynchronous/bug654337.vala \
asynchronous/bug661961.vala \
+ asynchronous/bug742621.vala \
asynchronous/closures.vala \
dbus/basic-types.test \
dbus/arrays.test \
diff --git a/tests/asynchronous/bug742621.vala b/tests/asynchronous/bug742621.vala
new file mode 100644
index 000000000..1577cafd9
--- /dev/null
+++ b/tests/asynchronous/bug742621.vala
@@ -0,0 +1,15 @@
+class Xyzzy : Object {
+ public bool b { get; set; }
+}
+
+Xyzzy? xyzzy = null;
+
+private void on_b() {
+}
+
+async void go_async() throws Error {
+ xyzzy.notify["b"].disconnect(on_b);
+}
+
+void main () {
+}