]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Update for threading.local test.
authorChristian Heimes <christian@cheimes.de>
Sat, 19 Jan 2008 15:06:09 +0000 (15:06 +0000)
committerChristian Heimes <christian@cheimes.de>
Sat, 19 Jan 2008 15:06:09 +0000 (15:06 +0000)
Lib/test/test_threading_local.py

index 7c2b9f43fe4f7bed850e61dc4bb8d26ea8f5f708..b7dd538f8ec109571e716eaf4eae9d0e576d71a4 100644 (file)
@@ -3,6 +3,7 @@ from doctest import DocTestSuite
 from test import test_support
 import threading
 import weakref
+import gc
 
 class Weak(object):
     pass
@@ -13,19 +14,34 @@ def target(local, weaklist):
     weaklist.append(weakref.ref(weak))
 
 class ThreadingLocalTest(unittest.TestCase):
+
     def test_local_refs(self):
+        self._local_refs(20)
+        self._local_refs(50)
+        self._local_refs(100)
+
+    def _local_refs(self, n):
         local = threading.local()
         weaklist = []
-        n = 20
         for i in range(n):
             t = threading.Thread(target=target, args=(local, weaklist))
             t.start()
             t.join()
+        del t
+
+        gc.collect()
         self.assertEqual(len(weaklist), n)
+
+        # XXX threading.local keeps the local of the last stopped thread alive.
         deadlist = [weak for weak in weaklist if weak() is None]
-        # XXX threading.local keeps the local of the last stopped thread alive
         self.assertEqual(len(deadlist), n-1)
 
+        # Assignment to the same thread local frees it sometimes (!)
+        local.someothervar = None
+        gc.collect()
+        deadlist = [weak for weak in weaklist if weak() is None]
+        self.assert_(len(deadlist) in (n-1, n), (n, len(deadlist)))
+
 def test_main():
     suite = unittest.TestSuite()
     suite.addTest(DocTestSuite('_threading_local'))