-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed
Labels
3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
Bug description:
Modification of type slots is protected by the global type lock, however, type slots are read non-atomically without holding the type lock. For example, in PyObject_SetItem
:
Lines 231 to 235 in 5bb059f
if (m && m->mp_ass_subscript) { | |
int res = m->mp_ass_subscript(o, key, value); | |
assert(_Py_CheckSlotResult(o, "__setitem__", res >= 0)); | |
return res; | |
} |
It's not clear how we want to address this. From @colesbury in #127169 (comment):
I'd lean towards doing a stop-the-world pause when modifying the slot so that we don't need
to change every read. I expect that to be a bit tricky since class definitions look like they're mutating
the class.
CPython versions tested on:
3.13, 3.14, CPython main branch
Operating systems tested on:
Linux
Linked PRs
Metadata
Metadata
Assignees
Labels
3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixesinterpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)topic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error