[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