https://github.com/python/cpython
Revision 5d21d884b6ffa45dac50a5f9a07c41356a8478b4 authored by mpage on 29 March 2024, 17:42:02 UTC, committed by GitHub on 29 March 2024, 17:42:02 UTC
Read the MRO in a thread-unsafe way in `PyType_IsSubtype` to avoid locking. Fixing this is tracked in #117306. 

The motivation for this change is in support of making weakrefs thread-safe in free-threaded builds:

`WeakValueDictionary` uses a special dictionary function, `_PyDict_DelItemIf`
to remove dead weakrefs from the dictionary. `_PyDict_DelItemIf` removes a key
if a user supplied predicate evaluates to true for the value associated with
the key. Crucially for the `WeakValueDictionary` use case, the predicate
evaluation + deletion sequence is atomic, provided that the predicate doesn’t
suspend. The predicate used by `WeakValueDictionary` includes a subtype check,
which we must ensure doesn't suspend in free-threaded builds.
1 parent 19c1dd6
History
Tip revision: 5d21d884b6ffa45dac50a5f9a07c41356a8478b4 authored by mpage on 29 March 2024, 17:42:02 UTC
gh-111926: Avoid locking in PyType_IsSubtype (#117275)
Tip revision: 5d21d88
File Mode Size
ISSUE_TEMPLATE
problem-matchers
workflows
CODEOWNERS -rw-r--r-- 8.5 KB
CONTRIBUTING.rst -rw-r--r-- 2.3 KB
PULL_REQUEST_TEMPLATE.md -rw-r--r-- 672 bytes
SECURITY.md -rw-r--r-- 492 bytes
dependabot.yml -rw-r--r-- 466 bytes

back to top