[Python-checkins] bpo-38631: _PyGILState_Init() returns PyStatus (GH-18908)
Victor Stinner
webhook-mailer at python.org
Tue Mar 10 18:49:21 EDT 2020
https://github.com/python/cpython/commit/4e53abb0f4773e1cce68a4f41ddbb43e74364c5f
commit: 4e53abb0f4773e1cce68a4f41ddbb43e74364c5f
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-03-10T23:49:16+01:00
summary:
bpo-38631: _PyGILState_Init() returns PyStatus (GH-18908)
_PyGILState_Init() now returns PyStatus rather than calling
Py_FatalError() on failure.
files:
M Include/internal/pycore_pylifecycle.h
M Python/pylifecycle.c
M Python/pystate.c
diff --git a/Include/internal/pycore_pylifecycle.h b/Include/internal/pycore_pylifecycle.h
index 2dd6149a6b3d3..cf228033a7249 100644
--- a/Include/internal/pycore_pylifecycle.h
+++ b/Include/internal/pycore_pylifecycle.h
@@ -83,7 +83,7 @@ extern void _PyHash_Fini(void);
extern void _PyTraceMalloc_Fini(void);
extern void _PyWarnings_Fini(PyInterpreterState *interp);
-extern void _PyGILState_Init(PyThreadState *tstate);
+extern PyStatus _PyGILState_Init(PyThreadState *tstate);
extern void _PyGILState_Fini(PyThreadState *tstate);
PyAPI_FUNC(void) _PyGC_DumpShutdownStats(PyThreadState *tstate);
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c
index d00bf821c570a..bc32eff436e68 100644
--- a/Python/pylifecycle.c
+++ b/Python/pylifecycle.c
@@ -551,7 +551,10 @@ pycore_create_interpreter(_PyRuntimeState *runtime,
_PyEval_FiniThreads(&runtime->ceval);
/* Auto-thread-state API */
- _PyGILState_Init(tstate);
+ status = _PyGILState_Init(tstate);
+ if (_PyStatus_EXCEPTION(status)) {
+ return status;
+ }
/* Create the GIL */
status = _PyEval_InitThreads(tstate);
diff --git a/Python/pystate.c b/Python/pystate.c
index a926e9753cb49..504f5f456dd2a 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -1147,7 +1147,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate)
/* Internal initialization/finalization functions called by
Py_Initialize/Py_FinalizeEx
*/
-void
+PyStatus
_PyGILState_Init(PyThreadState *tstate)
{
/* must init with valid states */
@@ -1157,13 +1157,14 @@ _PyGILState_Init(PyThreadState *tstate)
struct _gilstate_runtime_state *gilstate = &tstate->interp->runtime->gilstate;
if (PyThread_tss_create(&gilstate->autoTSSkey) != 0) {
- Py_FatalError("Could not allocate TSS entry");
+ return _PyStatus_NO_MEMORY();
}
gilstate->autoInterpreterState = tstate->interp;
assert(PyThread_tss_get(&gilstate->autoTSSkey) == NULL);
assert(tstate->gilstate_counter == 0);
_PyGILState_NoteThreadState(gilstate, tstate);
+ return _PyStatus_OK();
}
PyInterpreterState *
More information about the Python-checkins
mailing list