diff options
author | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-09 16:00:11 +0000 |
---|---|---|
committer | Antoine Pitrou <solipsis@pitrou.net> | 2009-11-09 16:00:11 +0000 |
commit | d7158d4c628a88486475b3da333eace7b650ef77 (patch) | |
tree | 082fb878bdec2ea88ee04d6c8351de778a9ef8a4 /Lib/test/lock_tests.py | |
parent | d19915ed76e31534f4f075c1c37c4972ace8fc42 (diff) | |
download | cpython-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.py | 13 |
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): """ |