[Stackless-checkins] r53557 - in stackless/branches/release25-maint/Stackless: core/stacklesseval.c unittests/test_generator.py

richard.tew python-checkins at python.org
Thu Jan 25 19:52:17 CET 2007


Author: richard.tew
Date: Thu Jan 25 19:52:17 2007
New Revision: 53557

Added:
   stackless/branches/release25-maint/Stackless/unittests/test_generator.py   (contents, props changed)
Modified:
   stackless/branches/release25-maint/Stackless/core/stacklesseval.c
Log:
Added Jeff Senn's generator leakage test and a fix for the bug it reproduced.
http://www.stackless.com/pipermail/stackless/2006-December/002144.html

Modified: stackless/branches/release25-maint/Stackless/core/stacklesseval.c
==============================================================================
--- stackless/branches/release25-maint/Stackless/core/stacklesseval.c	(original)
+++ stackless/branches/release25-maint/Stackless/core/stacklesseval.c	Thu Jan 25 19:52:17 2007
@@ -555,6 +555,7 @@
 
 	if (!result || f->f_stacktop == NULL) {
 		/* generator can't be rerun, so release the frame */
+		Py_DECREF(f);
 		gen->gi_frame = NULL;
 	}
 

Added: stackless/branches/release25-maint/Stackless/unittests/test_generator.py
==============================================================================
--- (empty file)
+++ stackless/branches/release25-maint/Stackless/unittests/test_generator.py	Thu Jan 25 19:52:17 2007
@@ -0,0 +1,24 @@
+import unittest
+import gc
+
+def f(): yield 1
+
+class TestGarbageCollection(unittest.TestCase):
+    def testSimpleLeakage(self):
+        leakage = []
+
+        gc.collect(2)
+        before  = gc.get_objects()
+
+        for i in f():
+            pass
+
+        gc.collect(2)
+        after = gc.get_objects()
+
+        for x in after:
+            if x is not before and x is not after and x not in before:
+                leakage.append(x)
+
+        if len(leakage):
+            self.failUnless(len(leakage) == 0, "Leaked %s" % repr(leakage))

_______________________________________________
Stackless-checkins mailing list
Stackless-checkins at stackless.com
http://www.stackless.com/mailman/listinfo/stackless-checkins



More information about the Stackless-checkins mailing list