]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
Fix memory management for closures used as signal handlers
authorJürg Billeter <j@bitron.ch>
Fri, 2 Oct 2009 19:50:28 +0000 (21:50 +0200)
committerJürg Billeter <j@bitron.ch>
Fri, 2 Oct 2009 20:05:51 +0000 (22:05 +0200)
Fixes bug 597155.

tests/Makefile.am
tests/objects/bug597155.vala [new file with mode: 0644]
vala/valasignaltype.vala

index e51066997dd7ec47fe365e62df199c1f1e3d67e0..2696259cea00e18250c53b4398cc1c65a6867437 100644 (file)
@@ -52,6 +52,7 @@ TESTS = \
        objects/test-034.vala \
        objects/bug593260.vala \
        objects/bug596621.vala \
+       objects/bug597155.vala \
        errors/errors.vala \
        errors/bug579101.vala \
        errors/bug596228.vala \
diff --git a/tests/objects/bug597155.vala b/tests/objects/bug597155.vala
new file mode 100644 (file)
index 0000000..c6a6283
--- /dev/null
@@ -0,0 +1,16 @@
+class Foo : Object {
+       public signal void bar ();
+}
+
+Foo do_foo () {
+       var foo = new Foo ();
+       foo.bar.connect (() => {
+               assert (foo is Foo);
+       });
+       return foo;
+}
+
+void main () {
+       var foo = do_foo ();
+       foo.bar ();
+}
index 19430a81065486a73f199022ff5324c40abd89a7..b7e3b84ef8343da3ce3053ed69e3fbf9e5c81f6a 100644 (file)
@@ -62,7 +62,9 @@ public class Vala.SignalType : DataType {
 
        DelegateType get_handler_type () {
                var sender_type = new ObjectType ((ObjectTypeSymbol) signal_symbol.parent_symbol);
-               return new DelegateType (signal_symbol.get_delegate (sender_type, this));
+               var result = new DelegateType (signal_symbol.get_delegate (sender_type, this));
+               result.value_owned = true;
+               return result;
        }
 
        Method get_connect_method () {