From: Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> Date: Mon, 20 Jul 2026 14:56:20 +0000 (+0200) Subject: [3.14] gh-154167: Fix test suite hang when SIGINT is ignored (GH-154168) (GH-154266) X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c3811b0ef2a9e0e2f079940310f12063bc9c6ab0;p=thirdparty%2FPython%2Fcpython.git [3.14] gh-154167: Fix test suite hang when SIGINT is ignored (GH-154168) (GH-154266) (cherry picked from commit 1047cbb9746f959f6787f2c393bd79cbae6100c5) Co-authored-by: Serhiy Storchaka Co-authored-by: Claude Fable 5 --- diff --git a/Lib/test/libregrtest/setup.py b/Lib/test/libregrtest/setup.py index b9b76a44e3b4..d62194acd9c2 100644 --- a/Lib/test/libregrtest/setup.py +++ b/Lib/test/libregrtest/setup.py @@ -50,6 +50,14 @@ def setup_process() -> None: for signum in signals: faulthandler.register(signum, chain=True, file=stderr_fd) + # Restore the default SIGINT handler if there is no Python-level + # handler. Python inherits the SIG_IGN disposition when the test + # suite runs as a shell background job; then asyncio.Runner does not + # install its own handler and _thread.interrupt_main() is a no-op, + # which makes some tests in test_asyncio and test_threading hang. + if signal.getsignal(signal.SIGINT) in (signal.SIG_IGN, signal.SIG_DFL): + signal.signal(signal.SIGINT, signal.default_int_handler) + adjust_rlimit_nofile() support.record_original_stdout(sys.stdout) diff --git a/Misc/NEWS.d/next/Tests/2026-07-19-20-15-00.gh-issue-154167.sigint.rst b/Misc/NEWS.d/next/Tests/2026-07-19-20-15-00.gh-issue-154167.sigint.rst new file mode 100644 index 000000000000..b2620f4a0bee --- /dev/null +++ b/Misc/NEWS.d/next/Tests/2026-07-19-20-15-00.gh-issue-154167.sigint.rst @@ -0,0 +1,3 @@ +The test runner (regrtest) now restores the default SIGINT handler if it +was inherited as ignored, so the test suite no longer hangs when run as +a shell background job.