mirror of
https://github.com/python/cpython.git
synced 2025-10-28 01:00:34 +00:00
PyOS_AfterFork_Child() uses PyStatus (GH-20596)
PyOS_AfterFork_Child() helper functions now return a PyStatus: PyOS_AfterFork_Child() is now responsible to handle errors. * Move _PySignal_AfterFork() to the internal C API * Add #ifdef HAVE_FORK on _PyGILState_Reinit(), _PySignal_AfterFork() and _PyInterpreterState_DeleteExceptMain().
This commit is contained in:
parent
297257f7bc
commit
26881c8fae
10 changed files with 84 additions and 50 deletions
|
|
@ -433,11 +433,9 @@ PyEval_ReleaseThread(PyThreadState *tstate)
|
|||
|
||||
#ifdef HAVE_FORK
|
||||
/* This function is called from PyOS_AfterFork_Child to destroy all threads
|
||||
* which are not running in the child process, and clear internal locks
|
||||
* which might be held by those threads.
|
||||
*/
|
||||
|
||||
void
|
||||
which are not running in the child process, and clear internal locks
|
||||
which might be held by those threads. */
|
||||
PyStatus
|
||||
_PyEval_ReInitThreads(_PyRuntimeState *runtime)
|
||||
{
|
||||
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
|
||||
|
|
@ -449,7 +447,7 @@ _PyEval_ReInitThreads(_PyRuntimeState *runtime)
|
|||
struct _gil_runtime_state *gil = &runtime->ceval.gil;
|
||||
#endif
|
||||
if (!gil_created(gil)) {
|
||||
return;
|
||||
return _PyStatus_OK();
|
||||
}
|
||||
recreate_gil(gil);
|
||||
|
||||
|
|
@ -457,11 +455,12 @@ _PyEval_ReInitThreads(_PyRuntimeState *runtime)
|
|||
|
||||
struct _pending_calls *pending = &tstate->interp->ceval.pending;
|
||||
if (_PyThread_at_fork_reinit(&pending->lock) < 0) {
|
||||
Py_FatalError("Can't initialize threads for pending calls");
|
||||
return _PyStatus_ERR("Can't reinitialize pending calls lock");
|
||||
}
|
||||
|
||||
/* Destroy all threads except the current one */
|
||||
_PyThreadState_DeleteExcept(runtime, tstate);
|
||||
return _PyStatus_OK();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue