gh-104341: Adjust tstate_must_exit() to Respect Interpreter Finalization (gh-104437)

With the move to a per-interpreter GIL, this check slipped through the cracks.
This commit is contained in:
Eric Snow 2023-05-15 13:59:26 -06:00 • committed by GitHub
parent cb88ae635e
commit 26baa747c2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 56 additions and 10 deletions

View file

@ -83,6 +83,13 @@ struct _is {
int _initialized;
int finalizing;
/* Set by Py_EndInterpreter().
Use _PyInterpreterState_GetFinalizing()
and _PyInterpreterState_SetFinalizing()
to access it, don't access it directly. */
_Py_atomic_address _finalizing;
struct _obmalloc_state obmalloc;
struct _ceval_state ceval;
@ -191,6 +198,17 @@ struct _is {
extern void _PyInterpreterState_Clear(PyThreadState *tstate);
static inline PyThreadState*
_PyInterpreterState_GetFinalizing(PyInterpreterState *interp) {
return (PyThreadState*)_Py_atomic_load_relaxed(&interp->_finalizing);
}
static inline void
_PyInterpreterState_SetFinalizing(PyInterpreterState *interp, PyThreadState *tstate) {
_Py_atomic_store_relaxed(&interp->_finalizing, (uintptr_t)tstate);
}
/* cross-interpreter data registry */
/* For now we use a global registry of shareable classes. An