diff options
author | Sam Gross <colesbury@gmail.com> | 2024-03-11 19:14:20 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-03-11 19:14:20 (GMT) |
commit | 9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac (patch) | |
tree | d343547914c06c2f8f39a81f10858d5f104c8374 | |
parent | 05070f40bbc3384c36c8b3dab76345ba92098d42 (diff) | |
download | cpython-9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac.zip cpython-9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac.tar.gz cpython-9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac.tar.bz2 |
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".
-rw-r--r-- | Python/pystate.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index 1418d03..635616c 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); } |