mirror of
https://github.com/python/cpython.git
synced 2024-11-23 18:04:37 +08:00
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".
This commit is contained in:
parent
05070f40bb
commit
9f983e00ec
@ -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);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user