[vala] Fix memory management for closures used as signal handlers



commit 7e192cd797d8f950ee35082863e01d455192d9f2
Author: Jürg Billeter <j bitron ch>
Date:   Fri Oct 2 21:50:28 2009 +0200

    Fix memory management for closures used as signal handlers
    
    Fixes bug 597155.

 tests/Makefile.am            |    1 +
 tests/objects/bug597155.vala |   16 ++++++++++++++++
 vala/valasignaltype.vala     |    4 +++-
 3 files changed, 20 insertions(+), 1 deletions(-)
---
diff --git a/tests/Makefile.am b/tests/Makefile.am
index e510669..2696259 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 0000000..c6a6283
--- /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 19430a8..b7e3b84 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 () {



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]