From 1f384e318481532323bb9076f4447bc02da07209 Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Tue, 7 Dec 2021 17:26:29 -0700 Subject: bpo-46008: Stop calling _PyThreadState_Init() in new_threadstate(). (gh-29973) This simplifies new_threadstate(). We also rename _PyThreadState_Init() to _PyThreadState_SetCurrent() to reflect what it actually does. https://bugs.python.org/issue46008 --- Python/pystate.c | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) (limited to 'Python/pystate.c') diff --git a/Python/pystate.c b/Python/pystate.c index 49acd560b3..f94019d029 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -631,7 +631,7 @@ allocate_chunk(int size_in_bytes, _PyStackChunk* previous) } static PyThreadState * -new_threadstate(PyInterpreterState *interp, int init) +new_threadstate(PyInterpreterState *interp) { _PyRuntimeState *runtime = interp->runtime; PyThreadState *tstate = (PyThreadState *)PyMem_RawCalloc(1, sizeof(PyThreadState)); @@ -662,10 +662,6 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->datastack_top = &tstate->datastack_chunk->data[1]; tstate->datastack_limit = (PyObject **)(((char *)tstate->datastack_chunk) + DATA_STACK_CHUNK_SIZE); - if (init) { - _PyThreadState_Init(tstate); - } - HEAD_LOCK(runtime); tstate->id = ++interp->threads.next_unique_id; tstate->next = interp->threads.head; @@ -680,17 +676,27 @@ new_threadstate(PyInterpreterState *interp, int init) PyThreadState * PyThreadState_New(PyInterpreterState *interp) { - return new_threadstate(interp, 1); + PyThreadState *tstate = new_threadstate(interp); + _PyThreadState_SetCurrent(tstate); + return tstate; } PyThreadState * _PyThreadState_Prealloc(PyInterpreterState *interp) { - return new_threadstate(interp, 0); + return new_threadstate(interp); } +// We keep this around for (accidental) stable ABI compatibility. +// Realisically, no extensions are using it. void _PyThreadState_Init(PyThreadState *tstate) +{ + Py_FatalError("_PyThreadState_Init() is for internal use only"); +} + +void +_PyThreadState_SetCurrent(PyThreadState *tstate) { _PyGILState_NoteThreadState(&tstate->interp->runtime->gilstate, tstate); } -- cgit v1.2.1