summaryrefslogtreecommitdiff
path: root/Lib/test/lock_tests.py
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2009-11-09 16:00:11 +0000
committerAntoine Pitrou <solipsis@pitrou.net>2009-11-09 16:00:11 +0000
commitd7158d4c628a88486475b3da333eace7b650ef77 (patch)
tree082fb878bdec2ea88ee04d6c8351de778a9ef8a4 /Lib/test/lock_tests.py
parentd19915ed76e31534f4f075c1c37c4972ace8fc42 (diff)
downloadcpython-git-d7158d4c628a88486475b3da333eace7b650ef77.tar.gz
Issue #7282: Fix a memory leak when an RLock was used in a thread other
than those started through `threading.Thread` (for example, using `thread.start_new_thread()`.
Diffstat (limited to 'Lib/test/lock_tests.py')
-rw-r--r--Lib/test/lock_tests.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
index a56da970a6..966f9bd7ca 100644
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -130,6 +130,19 @@ class BaseLockTests(BaseTestCase):
# Check the lock is unacquired
Bunch(f, 1).wait_for_finished()
+ def test_thread_leak(self):
+ # The lock shouldn't leak a Thread instance when used from a foreign
+ # (non-threading) thread.
+ lock = self.locktype()
+ def f():
+ lock.acquire()
+ lock.release()
+ n = len(threading.enumerate())
+ # We run many threads in the hope that existing threads ids won't
+ # be recycled.
+ Bunch(f, 15).wait_for_finished()
+ self.assertEqual(n, len(threading.enumerate()))
+
class LockTests(BaseLockTests):
"""