summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Peterson <benjamin@python.org>2015-10-06 04:56:22 (GMT)
committerBenjamin Peterson <benjamin@python.org>2015-10-06 04:56:22 (GMT)
commit51cd53e152b80614e59fb97fce568e6c700ce981 (patch)
treecedf604b2b9782a763a7c7a045f3a03eb6f7a96f
parent0451fb942e63f816b2d8a993d53bc5cbfda7efc8 (diff)
downloadcpython-51cd53e152b80614e59fb97fce568e6c700ce981.zip
cpython-51cd53e152b80614e59fb97fce568e6c700ce981.tar.gz
cpython-51cd53e152b80614e59fb97fce568e6c700ce981.tar.bz2
reinitialize an Event's Condition with a regular lock (closes #25319)
-rw-r--r--Lib/test/lock_tests.py8
-rw-r--r--Lib/threading.py2
-rw-r--r--Misc/ACKS1
-rw-r--r--Misc/NEWS3
4 files changed, 13 insertions, 1 deletions
diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py
index 2ff75c4..efc464f 100644
--- a/Lib/test/lock_tests.py
+++ b/Lib/test/lock_tests.py
@@ -305,6 +305,14 @@ class EventTests(BaseTestCase):
for r, dt in results2:
self.assertTrue(r)
+ def test_reset_internal_locks(self):
+ evt = self.eventtype()
+ old_lock = evt._Event__cond._Condition__lock
+ evt._reset_internal_locks()
+ new_lock = evt._Event__cond._Condition__lock
+ self.assertIsNot(new_lock, old_lock)
+ self.assertIs(type(new_lock), type(old_lock))
+
class ConditionTests(BaseTestCase):
"""
diff --git a/Lib/threading.py b/Lib/threading.py
index 27a5511..51205fa 100644
--- a/Lib/threading.py
+++ b/Lib/threading.py
@@ -565,7 +565,7 @@ class _Event(_Verbose):
def _reset_internal_locks(self):
# private! called by Thread._reset_internal_locks by _after_fork()
- self.__cond.__init__()
+ self.__cond.__init__(Lock())
def isSet(self):
'Return true if and only if the internal flag is true.'
diff --git a/Misc/ACKS b/Misc/ACKS
index 34f0a0a..5a30dab 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -1290,6 +1290,7 @@ Ryan Smith-Roberts
Rafal Smotrzyk
Eric Snow
Dirk Soede
+Nir Soffer
Paul Sokolovsky
Evgeny Sologubov
Cody Somerville
diff --git a/Misc/NEWS b/Misc/NEWS
index 0c4ea1f..eb43f1f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -43,6 +43,9 @@ Core and Builtins
Library
-------
+- 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.