diff options
| author | Victor Stinner <vstinner@python.org> | 2021-10-13 12:09:13 (GMT) |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-10-13 12:09:13 (GMT) |
| commit | 7cdc2a0f4b785327ad9d55312409a06e554df3d5 (patch) | |
| tree | 71a2b8fdc68c9fbebfc79e0a3dffafbcad72dd4e /Python | |
| parent | 773330773968f211c77abc7b5b525faa7b3c35a2 (diff) | |
| download | cpython-7cdc2a0f4b785327ad9d55312409a06e554df3d5.zip cpython-7cdc2a0f4b785327ad9d55312409a06e554df3d5.tar.gz cpython-7cdc2a0f4b785327ad9d55312409a06e554df3d5.tar.bz2 | |
pycore_pystate.h no longer redefines PyThreadState_GET() (GH-28921)
Redefining the PyThreadState_GET() macro in pycore_pystate.h is
useless since it doesn't affect files not including it. Either use
_PyThreadState_GET() directly, or don't use pycore_pystate.h internal
C API. For example, the _testcapi extension don't use the internal C
API, but use the public PyThreadState_Get() function instead.
Replace PyThreadState_Get() with _PyThreadState_GET(). The
_PyThreadState_GET() macro is more efficient than PyThreadState_Get()
and PyThreadState_GET() function calls which call fail with a fatal
Python error.
posixmodule.c and _ctypes extension now include <windows.h> before
pycore header files (like pycore_call.h).
_PyTraceback_Add() now uses _PyErr_Fetch()/_PyErr_Restore() instead
of PyErr_Fetch()/PyErr_Restore().
The _decimal and _xxsubinterpreters extensions are now built with the
Py_BUILD_CORE_MODULE macro defined to get access to the internal C
API.
Diffstat (limited to 'Python')
| -rw-r--r-- | Python/bltinmodule.c | 2 | ||||
| -rw-r--r-- | Python/ceval.c | 2 | ||||
| -rw-r--r-- | Python/context.c | 2 | ||||
| -rw-r--r-- | Python/pylifecycle.c | 2 | ||||
| -rw-r--r-- | Python/pystate.c | 7 | ||||
| -rw-r--r-- | Python/traceback.c | 13 |
6 files changed, 17 insertions, 11 deletions
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index d07ba38..9e3b25c 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -213,7 +213,7 @@ builtin___build_class__(PyObject *self, PyObject *const *args, Py_ssize_t nargs, goto error; } PyFrameConstructor *f = PyFunction_AS_FRAME_CONSTRUCTOR(func); - PyThreadState *tstate = PyThreadState_GET(); + PyThreadState *tstate = _PyThreadState_GET(); cell = _PyEval_Vector(tstate, f, ns, NULL, 0, NULL); if (cell != NULL) { if (bases != orig_bases) { diff --git a/Python/ceval.c b/Python/ceval.c index 2d617a6..f4cacd8 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -1064,7 +1064,7 @@ static int unpack_iterable(PyThreadState *, PyObject *, int, int, PyObject **); PyObject * PyEval_EvalCode(PyObject *co, PyObject *globals, PyObject *locals) { - PyThreadState *tstate = PyThreadState_GET(); + PyThreadState *tstate = _PyThreadState_GET(); if (locals == NULL) { locals = globals; } diff --git a/Python/context.c b/Python/context.c index 9560fb3..ad47992 100644 --- a/Python/context.c +++ b/Python/context.c @@ -728,7 +728,7 @@ static int contextvar_set(PyContextVar *var, PyObject *val) { var->var_cached = NULL; - PyThreadState *ts = PyThreadState_Get(); + PyThreadState *ts = _PyThreadState_GET(); PyContext *ctx = context_get(); if (ctx == NULL) { diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index bfddc19..c67a9b7 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -472,7 +472,7 @@ interpreter_update_config(PyThreadState *tstate, int only_update_path_config) int _PyInterpreterState_SetConfig(const PyConfig *src_config) { - PyThreadState *tstate = PyThreadState_Get(); + PyThreadState *tstate = _PyThreadState_GET(); int res = -1; PyConfig config; diff --git a/Python/pystate.c b/Python/pystate.c index f02de92..ee9507c 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -1671,8 +1671,11 @@ _check_xidata(PyThreadState *tstate, _PyCrossInterpreterData *data) int _PyObject_GetCrossInterpreterData(PyObject *obj, _PyCrossInterpreterData *data) { - // PyThreadState_Get() aborts if tstate is NULL. - PyThreadState *tstate = PyThreadState_Get(); + PyThreadState *tstate = _PyThreadState_GET(); +#ifdef Py_DEBUG + // The caller must hold the GIL + _Py_EnsureTstateNotNULL(tstate); +#endif PyInterpreterState *interp = tstate->interp; // Reset data before re-populating. diff --git a/Python/traceback.c b/Python/traceback.c index 06b40bb..3ea1db5 100644 --- a/Python/traceback.c +++ b/Python/traceback.c @@ -6,11 +6,13 @@ #include "code.h" // PyCode_Addr2Line etc #include "pycore_interp.h" // PyInterpreterState.gc #include "frameobject.h" // PyFrame_GetBack() -#include "pycore_frame.h" // _PyFrame_GetCode() -#include "pycore_pyarena.h" // _PyArena_Free() #include "pycore_ast.h" // asdl_seq_* #include "pycore_compile.h" // _PyAST_Optimize +#include "pycore_frame.h" // _PyFrame_GetCode() #include "pycore_parser.h" // _PyParser_ASTFromString +#include "pycore_pyarena.h" // _PyArena_Free() +#include "pycore_pyerrors.h" // _PyErr_Fetch() +#include "pycore_pystate.h" // _PyThreadState_GET() #include "../Parser/pegen.h" // _PyPegen_byte_offset_to_character_offset() #include "structmember.h" // PyMemberDef #include "osdefs.h" // SEP @@ -267,11 +269,12 @@ void _PyTraceback_Add(const char *funcname, const char *filename, int lineno) PyCodeObject *code; PyFrameObject *frame; PyObject *exc, *val, *tb; + PyThreadState *tstate = _PyThreadState_GET(); /* Save and clear the current exception. Python functions must not be called with an exception set. Calling Python functions happens when the codec of the filesystem encoding is implemented in pure Python. */ - PyErr_Fetch(&exc, &val, &tb); + _PyErr_Fetch(tstate, &exc, &val, &tb); globals = PyDict_New(); if (!globals) @@ -281,14 +284,14 @@ void _PyTraceback_Add(const char *funcname, const char *filename, int lineno) Py_DECREF(globals); goto error; } - frame = PyFrame_New(PyThreadState_Get(), code, globals, NULL); + frame = PyFrame_New(tstate, code, globals, NULL); Py_DECREF(globals); Py_DECREF(code); if (!frame) goto error; frame->f_lineno = lineno; - PyErr_Restore(exc, val, tb); + _PyErr_Restore(tstate, exc, val, tb); PyTraceBack_Here(frame); Py_DECREF(frame); return; |
