-
-
Notifications
You must be signed in to change notification settings - Fork 32.6k
Closed
Labels
3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixestopic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
The MemoryError
freelist isn't thread-safe if the GIL is disabled:
Lines 3850 to 3860 in 285c1c4
/* Fetch object from freelist and revive it */ | |
self = state->memerrors_freelist; | |
self->args = PyTuple_New(0); | |
/* This shouldn't happen since the empty tuple is persistent */ | |
if (self->args == NULL) { | |
return NULL; | |
} | |
state->memerrors_freelist = (PyBaseExceptionObject *) self->dict; | |
state->memerrors_numfree--; |
Most of the freelists were made thread-safe by making them per-thread in the free threaded build (using pycore_freelist.h
), but we don't want to do that for MemoryError
because its freelist serves a different purpose (it's not really for performance). I think we should just use a lock for MemoryError
's freelist.
Linked PRs
Metadata
Metadata
Assignees
Labels
3.13bugs and security fixesbugs and security fixes3.14bugs and security fixesbugs and security fixestopic-free-threadingtype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error