diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2025-04-01-19-25-05.gh-issue-131988.sbYLEs.rst b/Misc/NEWS.d/next/Core_and_Builtins/2025-04-01-19-25-05.gh-issue-131988.sbYLEs.rst new file mode 100644 index 00000000000..44f71238739 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2025-04-01-19-25-05.gh-issue-131988.sbYLEs.rst @@ -0,0 +1,2 @@ +Fix a performance regression that caused scaling bottlenecks in the free +threaded build in 3.13.1 and 3.13.2. diff --git a/Python/pystate.c b/Python/pystate.c index 900cba0de15..5222a7ec140 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1587,10 +1587,10 @@ new_threadstate(PyInterpreterState *interp, int whence) HEAD_UNLOCK(interp->runtime); #ifdef Py_GIL_DISABLED - if (id == 1) { + if (id > 1) { if (_Py_atomic_load_int(&interp->gc.immortalize) == 0) { // Immortalize objects marked as using deferred reference counting - // the first time a non-main thread is created. + // once a non-main thread is created, if we haven't already done so. _PyGC_ImmortalizeDeferredObjects(interp); } }