From: Jürg Billeter Date: Fri, 2 Oct 2009 19:50:28 +0000 (+0200) Subject: Fix memory management for closures used as signal handlers X-Git-Tag: 0.7.8~81 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=7e192cd797d8f950ee35082863e01d455192d9f2;p=thirdparty%2Fvala.git Fix memory management for closures used as signal handlers Fixes bug 597155. --- diff --git a/tests/Makefile.am b/tests/Makefile.am index e51066997..2696259ce 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..c6a628301 --- /dev/null +++ b/tests/objects/bug597155.vala @@ -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 (); +} diff --git a/vala/valasignaltype.vala b/vala/valasignaltype.vala index 19430a810..b7e3b84ef 100644 --- a/vala/valasignaltype.vala +++ b/vala/valasignaltype.vala @@ -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 () {