mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-43406: Fix test_signal.test_stress_modifying_handlers() (GH-24815)
Fix a race condition of test_stress_modifying_handlers() of test_signal: only raise signals while we are in the catch_unraisable_exception() context manager. Moreover, don't check if we received at least one signal if at least one signal got ignored.
This commit is contained in:
parent
a9c03d7fb7
commit
1fa17e8cc6
1 changed files with 13 additions and 3 deletions
|
@ -1280,11 +1280,16 @@ class StressTest(unittest.TestCase):
|
|||
|
||||
old_handler = signal.signal(signum, custom_handler)
|
||||
self.addCleanup(signal.signal, signum, old_handler)
|
||||
|
||||
t = threading.Thread(target=set_interrupts)
|
||||
t.start()
|
||||
try:
|
||||
ignored = False
|
||||
with support.catch_unraisable_exception() as cm:
|
||||
t.start()
|
||||
cycle_handlers()
|
||||
do_stop = True
|
||||
t.join()
|
||||
|
||||
if cm.unraisable is not None:
|
||||
# An unraisable exception may be printed out when
|
||||
# a signal is ignored due to the aforementioned
|
||||
|
@ -1293,8 +1298,13 @@ class StressTest(unittest.TestCase):
|
|||
self.assertIn(
|
||||
f"Signal {signum} ignored due to race condition",
|
||||
str(cm.unraisable.exc_value))
|
||||
# Sanity check that some signals were received, but not all
|
||||
self.assertGreater(num_received_signals, 0)
|
||||
ignored = True
|
||||
|
||||
# bpo-43406: Even if it is unlikely, it's technically possible that
|
||||
# all signals were ignored because of race conditions.
|
||||
if not ignored:
|
||||
# Sanity check that some signals were received, but not all
|
||||
self.assertGreater(num_received_signals, 0)
|
||||
self.assertLess(num_received_signals, num_sent_signals)
|
||||
finally:
|
||||
do_stop = True
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue