[vala] Fix memory management for closures used as signal handlers
- From: Jürg Billeter <juergbi src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [vala] Fix memory management for closures used as signal handlers
- Date: Fri, 2 Oct 2009 20:06:07 +0000 (UTC)
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]