From: Sam Gross Date: Mon, 11 Mar 2024 19:14:20 +0000 (-0400) Subject: gh-116515: Clear thread-local state before tstate_delete_common() (#116517) X-Git-Tag: v3.13.0a5~21 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac;p=thirdparty%2FPython%2Fcpython.git gh-116515: Clear thread-local state before tstate_delete_common() (#116517) This moves `current_fast_clear()` up so that the current thread state is `NULL` while running `tstate_delete_common()`. This doesn't fix any bugs, but it means that we are more consistent that `_PyThreadState_GET() != NULL` means that the thread is "attached". --- diff --git a/Python/pystate.c b/Python/pystate.c index 1418d034ca2f..635616c5648c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1609,6 +1609,7 @@ tstate_delete_common(PyThreadState *tstate) { assert(tstate->_status.cleared && !tstate->_status.finalized); assert(tstate->state != _Py_THREAD_ATTACHED); + tstate_verify_not_active(tstate); PyInterpreterState *interp = tstate->interp; if (interp == NULL) { @@ -1687,8 +1688,8 @@ _PyThreadState_DeleteCurrent(PyThreadState *tstate) _Py_qsbr_detach(((_PyThreadStateImpl *)tstate)->qsbr); #endif tstate_set_detached(tstate, _Py_THREAD_DETACHED); - tstate_delete_common(tstate); current_fast_clear(tstate->interp->runtime); + tstate_delete_common(tstate); _PyEval_ReleaseLock(tstate->interp, NULL); free_threadstate((_PyThreadStateImpl *)tstate); }