PyOS_AfterFork_Child() pass tstate to _PyEval_ReInitThreads() (GH-20598)

This commit is contained in:
Victor Stinner 2020-06-02 18:44:54 +02:00 committed by GitHub
parent 45b34a04a5
commit 317bab0bf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 6 deletions

View File

@ -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,

View File

@ -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:

View File

@ -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;