◐ Shell
clean mode source ↗

gh-111926: Make weakrefs thread-safe in free-threaded builds by mpage · Pull Request #117168 · python/cpython

added 21 commits

March 22, 2024 12:29
We need to tag weakrefs and their referents
The `is_dead` check from the default build is insufficient, since the
refcount may go to zero between when we check and when we incref. More
generally, `Py_NewRef` is unsafe to use if you have a borrowed refernce.
Locking is handled in the implementation

colesbury

We cannot assert now that we clear weakrefs without holding the
lock in _PyStaticType_ClearWeakRefs

colesbury

erlend-aasland

Co-authored-by: Erlend E. Aasland <erlend.aasland@protonmail.com>

diegorusso pushed a commit to diegorusso/cpython that referenced this pull request

Apr 17, 2024
…ython#117168)

Most mutable data is protected by a striped lock that is keyed on the
referenced object's address. The weakref's hash is protected using the
weakref's per-object lock.
 
Note that this only affects free-threaded builds. Apart from some minor
refactoring, the added code is all either gated by `ifdef`s or is a no-op
(e.g. `Py_BEGIN_CRITICAL_SECTION`).