summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSam Gross <colesbury@gmail.com>2024-03-11 19:14:20 (GMT)
committerGitHub <noreply@github.com>2024-03-11 19:14:20 (GMT)
commit9f983e00ec55b87a098a4c8229fe5bb9acb9f3ac (patch)
treed343547914c06c2f8f39a81f10858d5f104c8374
parent05070f40bbc3384c36c8b3dab76345ba92098d42 (diff)
downloadcpython-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.c3
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);
}