From e63894b3eed8ad2dd7690695f7f07bfbff59c05a Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Mon, 21 Mar 2022 03:03:22 +0100 Subject: bpo-46850: Remove _PyEval_CallTracing() function (GH-32019) Remove the private undocumented function _PyEval_CallTracing() from the C API. Call the public sys.call_tracing() function instead. --- Include/cpython/ceval.h | 2 -- Include/internal/pycore_ceval.h | 3 +++ .../next/C API/2022-03-21-02-26-27.bpo-46850.hU3c-O.rst | 3 +++ Python/ceval.c | 11 +++++++---- 4 files changed, 13 insertions(+), 6 deletions(-) create mode 100644 Misc/NEWS.d/next/C API/2022-03-21-02-26-27.bpo-46850.hU3c-O.rst diff --git a/Include/cpython/ceval.h b/Include/cpython/ceval.h index e0a6887..9d4eeaf 100644 --- a/Include/cpython/ceval.h +++ b/Include/cpython/ceval.h @@ -2,8 +2,6 @@ # error "this header file must not be included directly" #endif -PyAPI_FUNC(PyObject *) _PyEval_CallTracing(PyObject *func, PyObject *args); - PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *); PyAPI_DATA(int) _PyEval_SetProfile(PyThreadState *tstate, Py_tracefunc func, PyObject *arg); PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *); diff --git a/Include/internal/pycore_ceval.h b/Include/internal/pycore_ceval.h index 59a3453..45d26a3 100644 --- a/Include/internal/pycore_ceval.h +++ b/Include/internal/pycore_ceval.h @@ -34,6 +34,9 @@ PyAPI_FUNC(void) _PyEval_SignalAsyncExc(PyInterpreterState *interp); extern PyStatus _PyEval_ReInitThreads(PyThreadState *tstate); #endif +// Used by sys.call_tracing() +extern PyObject* _PyEval_CallTracing(PyObject *func, PyObject *args); + // Used by sys.get_asyncgen_hooks() extern PyObject* _PyEval_GetAsyncGenFirstiter(void); extern PyObject* _PyEval_GetAsyncGenFinalizer(void); diff --git a/Misc/NEWS.d/next/C API/2022-03-21-02-26-27.bpo-46850.hU3c-O.rst b/Misc/NEWS.d/next/C API/2022-03-21-02-26-27.bpo-46850.hU3c-O.rst new file mode 100644 index 0000000..f600ea8 --- /dev/null +++ b/Misc/NEWS.d/next/C API/2022-03-21-02-26-27.bpo-46850.hU3c-O.rst @@ -0,0 +1,3 @@ +Remove the private undocumented function ``_PyEval_CallTracing()`` from the +C API. Call the public :func:`sys.call_tracing` function instead. Patch by +Victor Stinner. diff --git a/Python/ceval.c b/Python/ceval.c index 04f2dde..6f449e3 100644 --- a/Python/ceval.c +++ b/Python/ceval.c @@ -6708,16 +6708,19 @@ call_trace(Py_tracefunc func, PyObject *obj, return result; } -PyObject * +PyObject* _PyEval_CallTracing(PyObject *func, PyObject *args) { + // Save and disable tracing PyThreadState *tstate = _PyThreadState_GET(); int save_tracing = tstate->tracing; int save_use_tracing = tstate->cframe->use_tracing; - PyObject *result; - tstate->tracing = 0; - result = PyObject_Call(func, args, NULL); + + // Call the tracing function + PyObject *result = PyObject_Call(func, args, NULL); + + // Restore tracing tstate->tracing = save_tracing; tstate->cframe->use_tracing = save_use_tracing; return result; -- cgit v0.12