https://github.com/python/cpython/commit/317bab0bf61e4cbab37c81baf185d8b57ca62a6b commit: 317bab0bf61e4cbab37c81baf185d8b57ca62a6b branch: master author: Victor Stinner <vstinner at python.org> committer: GitHub <noreply at github.com> date: 2020-06-02T18:44:54+02:00 summary: PyOS_AfterFork_Child() pass tstate to _PyEval_ReInitThreads() (GH-20598) files: M Include/internal/pycore_ceval.h M Modules/posixmodule.c M Python/ceval.c diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index 2da0154525b1c..aafb533b57d5f 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -25,7 +25,7 @@ PyAPI_FUNC(int) _PyEval_AddPendingCall( void *arg); PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyThreadState *tstate); #ifdef HAVE_FORK -extern PyStatus _PyEval_ReInitThreads(struct pyruntimestate *runtime); +extern PyStatus _PyEval_ReInitThreads(PyThreadState *tstate); #endif PyAPI_FUNC(void) _PyEval_SetCoroutineOriginTrackingDepth( PyThreadState *tstate, diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index afb6d183077a1..79779bfdeafd3 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -470,7 +470,10 @@ PyOS_AfterFork_Child(void) goto fatal_error; } - status = _PyEval_ReInitThreads(runtime); + PyThreadState *tstate = _PyThreadState_GET(); + _Py_EnsureTstateNotNULL(tstate); + + status = _PyEval_ReInitThreads(tstate); if (_PyStatus_EXCEPTION(status)) { goto fatal_error; } @@ -491,8 +494,9 @@ PyOS_AfterFork_Child(void) if (_PyStatus_EXCEPTION(status)) { goto fatal_error; } + assert(_PyThreadState_GET() == tstate); - run_at_forkers(_PyInterpreterState_GET()->after_forkers_child, 0); + run_at_forkers(tstate->interp->after_forkers_child, 0); return; fatal_error: diff --git a/Python/ceval.c b/Python/ceval.c index 5edcfe354054a..9ab8329d6d8e7 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -436,10 +436,9 @@ PyEval_ReleaseThread(PyThreadState *tstate) which are not running in the child process, and clear internal locks which might be held by those threads. */ PyStatus -_PyEval_ReInitThreads(_PyRuntimeState *runtime) +_PyEval_ReInitThreads(PyThreadState *tstate) { - PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime); - _Py_EnsureTstateNotNULL(tstate); + _PyRuntimeState *runtime = tstate->interp->runtime; #ifdef EXPERIMENTAL_ISOLATED_SUBINTERPRETERS struct _gil_runtime_state *gil = &tstate->interp->ceval.gil;
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4