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()`.
This commit is contained in:
Antoine Pitrou 2009-11-09 16:00:11 +00:00
parent d19915ed76
commit d7158d4c62
4 changed files with 29 additions and 12 deletions

View file

@ -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):
"""