mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
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).
This commit is contained in:
parent
4227bfa8b2
commit
f5198b09e1
8 changed files with 151 additions and 68 deletions
|
@ -1205,7 +1205,7 @@ thread_PyThread_start_new_thread(PyObject *self, PyObject *fargs)
|
|||
if (boot == NULL) {
|
||||
return PyErr_NoMemory();
|
||||
}
|
||||
boot->tstate = _PyThreadState_New(interp);
|
||||
boot->tstate = _PyThreadState_New(interp, _PyThreadState_WHENCE_THREADING);
|
||||
if (boot->tstate == NULL) {
|
||||
PyMem_RawFree(boot);
|
||||
if (!PyErr_Occurred()) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue