summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Lib/test/test_threading_local.py28
1 files changed, 27 insertions, 1 deletions
diff --git a/Lib/test/test_threading_local.py b/Lib/test/test_threading_local.py
index 0aaedbc93b..7c2b9f43fe 100644
--- a/Lib/test/test_threading_local.py
+++ b/Lib/test/test_threading_local.py
@@ -1,9 +1,35 @@
import unittest
from doctest import DocTestSuite
from test import test_support
+import threading
+import weakref
+
+class Weak(object):
+ pass
+
+def target(local, weaklist):
+ weak = Weak()
+ local.weak = weak
+ weaklist.append(weakref.ref(weak))
+
+class ThreadingLocalTest(unittest.TestCase):
+ def test_local_refs(self):
+ local = threading.local()
+ weaklist = []
+ n = 20
+ for i in range(n):
+ t = threading.Thread(target=target, args=(local, weaklist))
+ t.start()
+ t.join()
+ self.assertEqual(len(weaklist), n)
+ 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)
def test_main():
- suite = DocTestSuite('_threading_local')
+ suite = unittest.TestSuite()
+ suite.addTest(DocTestSuite('_threading_local'))
+ suite.addTest(unittest.makeSuite(ThreadingLocalTest))
try:
from thread import _local