[3.13] gh-109700: fix interpreter finalization while handling memory error (GH-136342) (#136353)

gh-109700: fix interpreter finalization while handling memory error (GH-136342)
(cherry picked from commit 0c3e3da195)

Co-authored-by: Kumar Aditya <kumaraditya@python.org>
This commit is contained in:
Miss Islington (bot) 2025-07-07 09:37:35 +02:00 committed by GitHub
parent bc3390c00a
commit 2362cb6c6e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1717,8 +1717,10 @@ finalize_modules(PyThreadState *tstate)
#endif #endif
// Stop watching __builtin__ modifications // Stop watching __builtin__ modifications
PyDict_Unwatch(0, interp->builtins); if (PyDict_Unwatch(0, interp->builtins) < 0) {
// might happen if interp is cleared before watching the __builtin__
PyErr_Clear();
}
PyObject *modules = _PyImport_GetModules(interp); PyObject *modules = _PyImport_GetModules(interp);
if (modules == NULL) { if (modules == NULL) {
// Already done // Already done
@ -2385,15 +2387,13 @@ new_interpreter(PyThreadState **tstate_p,
error: error:
*tstate_p = NULL; *tstate_p = NULL;
if (tstate != NULL) { if (tstate != NULL) {
PyThreadState_Clear(tstate); Py_EndInterpreter(tstate);
_PyThreadState_Detach(tstate); } else {
PyThreadState_Delete(tstate); PyInterpreterState_Delete(interp);
} }
if (save_tstate != NULL) { if (save_tstate != NULL) {
_PyThreadState_Attach(save_tstate); _PyThreadState_Attach(save_tstate);
} }
PyInterpreterState_Delete(interp);
return status; return status;
} }