From: Benjamin Peterson Date: Tue, 6 Oct 2015 04:56:22 +0000 (-0700) Subject: reinitialize an Event's Condition with a regular lock (closes #25319) X-Git-Tag: v3.5.1rc1~209^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=15982aad2b09086b5d8819ed5dfb0ec6195fd41a;p=thirdparty%2FPython%2Fcpython.git reinitialize an Event's Condition with a regular lock (closes #25319) --- diff --git a/Lib/test/lock_tests.py b/Lib/test/lock_tests.py index 42a7d8216352..462ecefb3639 100644 --- a/Lib/test/lock_tests.py +++ b/Lib/test/lock_tests.py @@ -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): """ diff --git a/Lib/threading.py b/Lib/threading.py index 37aa3b8ddc04..80f809ce2fc0 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -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.""" diff --git a/Misc/ACKS b/Misc/ACKS index a40545a89b92..b9b3e7bb7c73 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -1315,6 +1315,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 d7dd962b8b57..70f3a5155a70 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -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.