From 531f2ebd60a662111c78107935d249d3d52f9a4f Mon Sep 17 00:00:00 2001 From: "Miss Islington (bot)" <31488909+miss-islington@users.noreply.github.com> Date: Wed, 10 Mar 2021 07:10:57 -0800 Subject: bpo-43406: Fix test_signal.test_stress_modifying_handlers() (GH-24815) (GH-24817) 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. (cherry picked from commit 1fa17e8cc62775a2e34b158135ce8589f9394f03) Co-authored-by: Victor Stinner Co-authored-by: Victor Stinner --- Lib/test/test_signal.py | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Lib/test/test_signal.py b/Lib/test/test_signal.py index b69daa7..f18e72f 100644 --- a/Lib/test/test_signal.py +++ b/Lib/test/test_signal.py @@ -1272,11 +1272,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 @@ -1285,8 +1290,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 -- cgit v0.12