-
-
Notifications
You must be signed in to change notification settings - Fork 33.2k
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
autoTssKeyto a_Py_thread_locallike_Py_tss_tstate, which doesn't require deletion - Don't delete
autoTssKeyat 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