[vala] codegen: Fix memory leak when destroying generic variables



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]