[vala] codegen: Fix memory leak when destroying generic variables
- From: Luca Bruno <lucabru src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [vala] codegen: Fix memory leak when destroying generic variables
- Date: Wed, 2 Nov 2011 21:44:08 +0000 (UTC)
commit 9d8ecc1da5f401e4d0cb2c2b149d340ba64c2c67
Author: Luca Bruno <lucabru src gnome org>
Date: Wed Nov 2 22:24:41 2011 +0100
codegen: Fix memory leak when destroying generic variables
codegen/valaccodebasemodule.vala | 4 +++-
tests/Makefile.am | 1 +
tests/methods/generics.vala | 22 ++++++++++++++++++++++
3 files changed, 26 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valaccodebasemodule.vala b/codegen/valaccodebasemodule.vala
index 1d20329..233b666 100644
--- a/codegen/valaccodebasemodule.vala
+++ b/codegen/valaccodebasemodule.vala
@@ -3083,7 +3083,9 @@ public abstract class Vala.CCodeBaseModule : CodeGenerator {
var cisnull = new CCodeBinaryExpression (CCodeBinaryOperator.EQUALITY, cvar, new CCodeConstant ("NULL"));
if (type.type_parameter != null) {
- if (!(current_type_symbol is Class) || current_class.is_compact) {
+ var parent = type.type_parameter.parent_symbol;
+ var cl = parent as Class;
+ if ((!(parent is Method) && !(parent is ObjectTypeSymbol)) || (cl != null && cl.is_compact)) {
return new CCodeConstant ("NULL");
}
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 6619455..444dcd4 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -49,6 +49,7 @@ TESTS = \
methods/bug653391.vala \
methods/bug653908.vala \
methods/bug663210.vala \
+ methods/generics.vala \
control-flow/break.vala \
control-flow/expressions-conditional.vala \
control-flow/for.vala \
diff --git a/tests/methods/generics.vala b/tests/methods/generics.vala
new file mode 100644
index 0000000..b465523
--- /dev/null
+++ b/tests/methods/generics.vala
@@ -0,0 +1,22 @@
+interface Foo : Object {
+ public void foo<T> (owned T bar) {
+ bar = null;
+ }
+}
+
+class Baz : Object, Foo {
+}
+
+void foo<T> (owned T bar) {
+ bar = null;
+}
+
+void main () {
+ var bar = new Object ();
+ foo<Object> (bar);
+ assert (bar.ref_count == 1);
+
+ var baz = new Baz ();
+ baz.foo<Object> (bar);
+ assert (baz.ref_count == 1);
+}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]