From 5441d5c838978a253cae97fe3a8810e0b1fc6215 Mon Sep 17 00:00:00 2001 From: Armaan Vakharia Date: Mon, 18 May 2026 12:00:22 -0700 Subject: [PATCH 1/3] Remove faulthandler_traverse `faulthandler_traverse` visits Python objects owned by `_PyRuntime`, not by the module instance. With multi-phase init allowing multiple module instances, each instance's GC traversal decrements `gc_refs` on the same runtime-owned objects, driving it negative when two instances are collected simultaneously. --- Modules/faulthandler.c | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 1b4f0c2302daae..fa7fb7085d7e8b 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -1349,21 +1349,6 @@ faulthandler__stack_overflow_impl(PyObject *module) #endif /* defined(FAULTHANDLER_USE_ALT_STACK) && defined(HAVE_SIGACTION) */ -static int -faulthandler_traverse(PyObject *module, visitproc visit, void *arg) -{ - Py_VISIT(thread.file); -#ifdef FAULTHANDLER_USER - if (user_signals != NULL) { - for (size_t signum=0; signum < Py_NSIG; signum++) - Py_VISIT(user_signals[signum].file); - } -#endif - Py_VISIT(fatal_error.file); - return 0; -} - - #ifdef MS_WINDOWS /*[clinic input] faulthandler._raise_exception @@ -1459,7 +1444,6 @@ static struct PyModuleDef module_def = { .m_name = "faulthandler", .m_doc = module_doc, .m_methods = module_methods, - .m_traverse = faulthandler_traverse, .m_slots = faulthandler_slots }; From a8fab9ff3c6ade13b6ba764a0fd294170096bf58 Mon Sep 17 00:00:00 2001 From: Armaan Vakharia Date: Mon, 18 May 2026 13:47:57 -0700 Subject: [PATCH 2/3] Added relevant news entry --- .../2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst new file mode 100644 index 00000000000000..e24fac614baf60 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst @@ -0,0 +1 @@ +Removed faulthandler traversal function to resolve double deref of singleton From dd3565ef1d3ceae4f56e5f3c1b7142210af936f4 Mon Sep 17 00:00:00 2001 From: Armaan Vakharia Date: Mon, 18 May 2026 14:22:05 -0700 Subject: [PATCH 3/3] Updated NEWS entry to focus on user impact --- .../2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst index e24fac614baf60..8d3b29d69cc857 100644 --- a/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst @@ -1 +1 @@ -Removed faulthandler traversal function to resolve double deref of singleton +Fix crash when faulthandler is imported more than once.