]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
gh-109860: Use a New Thread State When Switching Interpreters, When Necessary (gh...
authorEric Snow <ericsnowcurrently@gmail.com>
Tue, 3 Oct 2023 15:20:48 +0000 (09:20 -0600)
committerGitHub <noreply@github.com>
Tue, 3 Oct 2023 15:20:48 +0000 (09:20 -0600)
commitf5198b09e16bca1886f8245fa88203d07d51ec11
treee2032653aee5b6e2df560f6a37eca5a957d1fb6f
parent4227bfa8b273207a2b882f7d69c8ac49c3d2b57d
gh-109860: Use a New Thread State When Switching Interpreters, When Necessary (gh-110245)

In a few places we switch to another interpreter without knowing if it has a thread state associated with the current thread.  For the main interpreter there wasn't much of a problem, but for subinterpreters we were *mostly* okay re-using the tstate created with the interpreter (located via PyInterpreterState_ThreadHead()).  There was a good chance that tstate wasn't actually in use by another thread.

However, there are no guarantees of that.  Furthermore, re-using an already used tstate is currently fragile.  To address this, now we create a new thread state in each of those places and use it.

One consequence of this change is that PyInterpreterState_ThreadHead() may not return NULL (though that won't happen for the main interpreter).
Include/cpython/pystate.h
Include/internal/pycore_pystate.h
Include/internal/pycore_runtime_init.h
Lib/threading.py
Modules/_threadmodule.c
Modules/_xxsubinterpretersmodule.c
Python/pylifecycle.c
Python/pystate.c