From: Kumar Aditya Date: Sun, 30 Mar 2025 11:01:12 +0000 (+0530) Subject: gh-127945: acquire critical section around `PyCFuncPtr_call` (#131898) X-Git-Tag: v3.14.0a7~141 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=46ada1e5e0b8942ea72e748880732a9468be1e92;p=thirdparty%2FPython%2Fcpython.git gh-127945: acquire critical section around `PyCFuncPtr_call` (#131898) --- diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c index 7536d3fdc2b8..59ea579627e5 100644 --- a/Modules/_ctypes/_ctypes.c +++ b/Modules/_ctypes/_ctypes.c @@ -4406,7 +4406,7 @@ _build_result(PyObject *result, PyObject *callargs, } static PyObject * -PyCFuncPtr_call(PyObject *op, PyObject *inargs, PyObject *kwds) +PyCFuncPtr_call_lock_held(PyObject *op, PyObject *inargs, PyObject *kwds) { PyObject *restype; PyObject *converters; @@ -4544,6 +4544,16 @@ PyCFuncPtr_call(PyObject *op, PyObject *inargs, PyObject *kwds) outmask, inoutmask, numretvals); } +static PyObject * +PyCFuncPtr_call(PyObject *op, PyObject *inargs, PyObject *kwds) +{ + PyObject *result; + Py_BEGIN_CRITICAL_SECTION(op); + result = PyCFuncPtr_call_lock_held(op, inargs, kwds); + Py_END_CRITICAL_SECTION(); + return result; +} + static int PyCFuncPtr_traverse(PyObject *op, visitproc visit, void *arg) {