reinitialize an Event's Condition with a regular lock (closes #25319)

This commit is contained in:
Benjamin Peterson 2015-10-05 21:56:22 -07:00
parent 601953b679
commit 15982aad2b
4 changed files with 13 additions and 1 deletions

View file

@ -388,6 +388,14 @@ class EventTests(BaseTestCase):
b.wait_for_finished()
self.assertEqual(results, [True] * N)
def test_reset_internal_locks(self):
evt = self.eventtype()
old_lock = evt._cond._lock
evt._reset_internal_locks()
new_lock = evt._cond._lock
self.assertIsNot(new_lock, old_lock)
self.assertIs(type(new_lock), type(old_lock))
class ConditionTests(BaseTestCase):
"""

View file

@ -496,7 +496,7 @@ class Event:
def _reset_internal_locks(self):
# private! called by Thread._reset_internal_locks by _after_fork()
self._cond.__init__()
self._cond.__init__(Lock())
def is_set(self):
"""Return true if and only if the internal flag is true."""

View file

@ -1315,6 +1315,7 @@ Ryan Smith-Roberts
Rafal Smotrzyk
Eric Snow
Dirk Soede
Nir Soffer
Paul Sokolovsky
Evgeny Sologubov
Cody Somerville

View file

@ -100,6 +100,9 @@ Library
submit a coroutine to a loop from another thread, returning a
concurrent.futures.Future. By Vincent Michel.
- Issue #25319: When threading.Event is reinitialized, the underlying condition
should use a regular lock rather than a recursive lock.
- Issue #25232: Fix CGIRequestHandler to split the query from the URL at the
first question mark (?) rather than the last. Patch from Xiang Zhang.