[3.13] gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) (GH-137827)
* [3.13] gh-87135: Hang non-main threads that attempt to acquire the GIL during finalization (GH-105805) Instead of surprise crashes and memory corruption, we now hang threads that attempt to re-enter the Python interpreter after Python runtime finalization has started. These are typically daemon threads (our long standing mis-feature) but could also be threads spawned by extension modules that then try to call into Python. This marks the `PyThread_exit_thread` public C API as deprecated as there is no plausible safe way to accomplish that on any supported platform in the face of things like C++ code with finalizers anywhere on a thread's stack. Doing this was the least bad option. (cherry picked from commit 8cc5aa47ee464ddfd8da5461edecf4a5c72df2ff) Co-authored-by: Jeremy Maitin-Shepard <jeremy@jeremyms.com> Co-authored-by: Gregory P. Smith <greg@krypto.org> * state "3.13.7 and earlier" * backport: do not add the deprecated marker * fix Py_IsFinalizing doc ref --------- Co-authored-by: Jeremy Maitin-Shepard <jeremy@jeremyms.com>
G
Gregory P. Smith committed
9face218e7b640e52b83cd68cebb441d5ff0f8e2
Parent: f2b7954
Committed by GitHub <noreply@github.com>
on 8/17/2025, 4:08:14 PM