From: Kumar Aditya Date: Mon, 7 Jul 2025 07:15:22 +0000 (+0530) Subject: gh-109700: fix interpreter finalization while handling memory error (#136342) X-Git-Tag: v3.15.0a1~1076 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=0c3e3da19570424649c33c0c2c29dc12541935e7;p=thirdparty%2FPython%2Fcpython.git gh-109700: fix interpreter finalization while handling memory error (#136342) --- diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 724fda635112..00e8d0307655 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -1702,8 +1702,10 @@ finalize_modules(PyThreadState *tstate) #endif // 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); if (modules == NULL) { // Already done @@ -2377,15 +2379,13 @@ new_interpreter(PyThreadState **tstate_p, error: *tstate_p = NULL; if (tstate != NULL) { - PyThreadState_Clear(tstate); - _PyThreadState_Detach(tstate); - PyThreadState_Delete(tstate); + Py_EndInterpreter(tstate); + } else { + PyInterpreterState_Delete(interp); } if (save_tstate != NULL) { _PyThreadState_Attach(save_tstate); } - PyInterpreterState_Delete(interp); - return status; }