https://github.com/python/cpython/commit/fa9773ed9dcc35d49f854e365f7e8bf8452d16e0
commit: fa9773ed9dcc35d49f854e365f7e8bf8452d16e0
branch: 3.14
author: Armaan Vakharia <[email protected]>
committer: JelleZijlstra <[email protected]>
date: 2026-05-19T15:08:58Z
summary:
[3.14] gh-149590: Remove faulthandler_traverse (GH-150023) (#150088)
`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.
(cherry picked from commit 56737483c2ffdaadfec648fd38d409c6b10941c0)
files:
A
Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst
M Modules/faulthandler.c
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..8d3b29d69cc857
--- /dev/null
+++
b/Misc/NEWS.d/next/Core_and_Builtins/2026-05-18-13-47-17.gh-issue-149590.IPBeQx.rst
@@ -0,0 +1 @@
+Fix crash when faulthandler is imported more than once.
diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c
index 2495faa38170b7..09b910f4cf7d19 100644
--- a/Modules/faulthandler.c
+++ b/Modules/faulthandler.c
@@ -1248,20 +1248,6 @@ faulthandler_stack_overflow(PyObject *self, PyObject
*Py_UNUSED(ignored))
#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
static PyObject *
faulthandler_raise_exception(PyObject *self, PyObject *args)
@@ -1394,7 +1380,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
};
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]