[Python-checkins] gh-98608: Fix Failure-handling in new_interpreter() (gh-102658)

ericsnowcurrently webhook-mailer at python.org
Tue Mar 21 14:48:04 EDT 2023


https://github.com/python/cpython/commit/d1b883b52a99427d234c20e4a92ddfa6a1da8880
commit: d1b883b52a99427d234c20e4a92ddfa6a1da8880
branch: main
author: Eric Snow <ericsnowcurrently at gmail.com>
committer: ericsnowcurrently <ericsnowcurrently at gmail.com>
date: 2023-03-21T12:47:55-06:00
summary:

gh-98608: Fix Failure-handling in new_interpreter() (gh-102658)

The error-handling code in new_interpreter() has been broken for a while.  We hadn't noticed because those code mostly doesn't fail.  (I noticed while working on gh-101660.)  The problem is that we try to clear/delete the newly-created thread/interpreter using itself, which just failed.  The solution is to switch back to the calling thread state first.

https://github.com/python/cpython/issues/98608

files:
M Python/pylifecycle.c

diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index 0d546d52087e..d0e85519d234 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -2062,10 +2062,10 @@ new_interpreter(PyThreadState **tstate_p, const _PyInterpreterConfig *config)
 
     /* Oops, it didn't work.  Undo it all. */
     PyErr_PrintEx(0);
+    PyThreadState_Swap(save_tstate);
     PyThreadState_Clear(tstate);
     PyThreadState_Delete(tstate);
     PyInterpreterState_Delete(interp);
-    PyThreadState_Swap(save_tstate);
 
     return status;
 }



More information about the Python-checkins mailing list