diff options
author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2023-03-21 19:13:31 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-21 19:13:31 (GMT) |
commit | 4c6b354699c2967879b9c99fe247c4d97f0e31f9 (patch) | |
tree | 350e95f49a6102e90037564025bcee6ef57afc12 /Python/pylifecycle.c | |
parent | e6e3b1b27d08bfe77b5e19b41fbb006fe7bfed36 (diff) | |
download | cpython-4c6b354699c2967879b9c99fe247c4d97f0e31f9.zip cpython-4c6b354699c2967879b9c99fe247c4d97f0e31f9.tar.gz cpython-4c6b354699c2967879b9c99fe247c4d97f0e31f9.tar.bz2 |
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/pylifecycle.c')
-rw-r--r-- | Python/pylifecycle.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 4060c23..9248e97 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -2028,10 +2028,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; } |