[Python-checkins] bpo-38631: Replace Py_FatalError() with assert() in ceval.c (GH-18279)

Victor Stinner webhook-mailer at python.org
Thu Jan 30 06:20:55 EST 2020


https://github.com/python/cpython/commit/17c68b8107e348aeaaa05f7ac5072cacff916022
commit: 17c68b8107e348aeaaa05f7ac5072cacff916022
branch: master
author: Victor Stinner <vstinner at python.org>
committer: GitHub <noreply at github.com>
date: 2020-01-30T12:20:48+01:00
summary:

bpo-38631: Replace Py_FatalError() with assert() in ceval.c (GH-18279)

Replace a few Py_FatalError() calls if tstate is NULL with
assert(tstate != NULL) in ceval.c.

PyEval_AcquireThread(), PyEval_ReleaseThread() and
PyEval_RestoreThread() must never be called with a NULL tstate.

files:
M Doc/c-api/init.rst
M Python/ceval.c

diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 8913dbfe249dc..7ea48aec009c9 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -1110,7 +1110,7 @@ All of the following functions must be called after :c:func:`Py_Initialize`.
 .. c:function:: void PyEval_AcquireThread(PyThreadState *tstate)
 
    Acquire the global interpreter lock and set the current thread state to
-   *tstate*, which should not be ``NULL``.  The lock must have been created earlier.
+   *tstate*, which must not be ``NULL``.  The lock must have been created earlier.
    If this thread already has the lock, deadlock ensues.
 
    .. note::
diff --git a/Python/ceval.c b/Python/ceval.c
index 2770dc6d08dd2..2bf64eda4224a 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -302,9 +302,7 @@ PyEval_ReleaseLock(void)
 void
 PyEval_AcquireThread(PyThreadState *tstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_AcquireThread: NULL new thread state");
-    }
+    assert(tstate != NULL);
 
     _PyRuntimeState *runtime = tstate->interp->runtime;
     struct _ceval_runtime_state *ceval = &runtime->ceval;
@@ -321,9 +319,7 @@ PyEval_AcquireThread(PyThreadState *tstate)
 void
 PyEval_ReleaseThread(PyThreadState *tstate)
 {
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_ReleaseThread: NULL thread state");
-    }
+    assert(tstate != NULL);
 
     _PyRuntimeState *runtime = tstate->interp->runtime;
     PyThreadState *new_tstate = _PyThreadState_Swap(&runtime->gilstate, NULL);
@@ -385,12 +381,10 @@ PyEval_SaveThread(void)
 void
 PyEval_RestoreThread(PyThreadState *tstate)
 {
+    assert(tstate != NULL);
+
     _PyRuntimeState *runtime = tstate->interp->runtime;
     struct _ceval_runtime_state *ceval = &runtime->ceval;
-
-    if (tstate == NULL) {
-        Py_FatalError("PyEval_RestoreThread: NULL tstate");
-    }
     assert(gil_created(&ceval->gil));
 
     int err = errno;



More information about the Python-checkins mailing list