diff options
Diffstat (limited to 'Lib/test')
-rw-r--r-- | Lib/test/lock_tests.py | 13 | ||||
-rw-r--r-- | Lib/test/test_threading.py | 6 |
2 files changed, 15 insertions, 4 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): """ diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index 4e0a572c85..1a0cd161b5 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -143,11 +143,9 @@ class ThreadTests(BaseTestCase): def test_foreign_thread(self): # Check that a "foreign" thread can use the threading module. def f(mutex): - # Acquiring an RLock forces an entry for the foreign + # Calling current_thread() forces an entry for the foreign # thread to get made in the threading._active map. - r = threading.RLock() - r.acquire() - r.release() + threading.current_thread() mutex.release() mutex = threading.Lock() |