aboutsummaryrefslogtreecommitdiff
path: root/Python
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2023-03-21 12:10:36 -0700
committerGitHub <noreply@github.com>2023-03-21 12:10:36 -0700
commitd5fdc3f07ec64d6e17a63f995ed03f0f107cda78 (patch)
tree0fef80a2883c2e33f8392a9af8c1df0769867237 /Python
parente732a859340353e982c69a80b753830756ee85bf (diff)
downloadcpython3-d5fdc3f07ec64d6e17a63f995ed03f0f107cda78.tar.gz
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. (cherry picked from commit d1b883b52a99427d234c20e4a92ddfa6a1da8880) Co-authored-by: Eric Snow <ericsnowcurrently@gmail.com> https: //github.com/python/cpython/issues/98608
Diffstat (limited to 'Python')
-rw-r--r--Python/pylifecycle.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index eeaf20b461..b0c5da56c4 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -1962,10 +1962,10 @@ error:
/* 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;
}