gh-109700: fix interpreter finalization while handling memory error (#136342)

This commit is contained in:
Kumar Aditya 2025-07-07 12:45:22 +05:30 committed by GitHub
parent 85b817da94
commit 0c3e3da195
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1702,8 +1702,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
@ -2377,15 +2379,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;
} }