diff --git a/Python/pystate.c b/Python/pystate.c index 36057ee13b..09fbc3a7c9 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -290,12 +290,6 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) _PyErr_Clear(tstate); } - HEAD_LOCK(runtime); - for (PyThreadState *p = interp->tstate_head; p != NULL; p = p->next) { - PyThreadState_Clear(p); - } - HEAD_UNLOCK(runtime); - Py_CLEAR(interp->audit_hooks); PyConfig_Clear(&interp->config); @@ -324,6 +318,11 @@ interpreter_clear(PyInterpreterState *interp, PyThreadState *tstate) /* Last garbage collection on this interpreter */ _PyGC_CollectNoFail(tstate); + HEAD_LOCK(runtime); + for (PyThreadState *p = interp->tstate_head; p != NULL; p = p->next) { + PyThreadState_Clear(p); + } + HEAD_UNLOCK(runtime); _PyGC_Fini(interp); /* We don't clear sysdict and builtins until the end of this function.