-
-
Notifications
You must be signed in to change notification settings - Fork 32.4k
Closed
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
The autoTssKey
is deleted during _PyRuntimeState_Fini
by gilstate_tss_fini
. This isn't safe because other threads may try calling PyGILState_Ensure()
or PyGILState_GetThisThreadState()
concurrently during shutdown.
Lines 486 to 501 in e9d210b
void | |
_PyRuntimeState_Fini(_PyRuntimeState *runtime) | |
{ | |
#ifdef Py_REF_DEBUG | |
/* The count is cleared by _Py_FinalizeRefTotal(). */ | |
assert(runtime->object_state.interpreter_leaks == 0); | |
#endif | |
if (gilstate_tss_initialized(runtime)) { | |
gilstate_tss_fini(runtime); | |
} | |
if (PyThread_tss_is_created(&runtime->trashTSSkey)) { | |
PyThread_tss_delete(&runtime->trashTSSkey); | |
} | |
} |
We can:
- Convert
autoTssKey
to a_Py_thread_local
like_Py_tss_tstate
, which doesn't require deletion - Don't delete
autoTssKey
at runtime finalization
My preference is for the first option.
cc @ZeroIntensity @ericsnowcurrently @gpshead
Linked PRs
Metadata
Metadata
Assignees
Labels
interpreter-core(Objects, Python, Grammar, and Parser dirs)(Objects, Python, Grammar, and Parser dirs)type-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error