#30 Adapt tracing code to Python 3.10
Merged 2 years ago by churchyard. Opened 2 years ago by churchyard.
rpms/ churchyard/Cython py310-tracing  into  rawhide

file added
+22
@@ -0,0 +1,22 @@ 

+ From 8d177f4aa51a663e8c51de3210ccb329d7629d36 Mon Sep 17 00:00:00 2001

+ From: Stefan Behnel <stefan_ml@behnel.de>

+ Date: Sat, 15 May 2021 22:38:57 +0200

+ Subject: [PATCH] Fix another direct usage of "tstate->use_tracing" in Py3.10.

+ 

+ ---

+  Cython/Utility/Profile.c | 2 +-

+  1 file changed, 1 insertion(+), 1 deletion(-)

+ 

+ diff --git a/Cython/Utility/Profile.c b/Cython/Utility/Profile.c

+ index 3134aa0403..362cc93dda 100644

+ --- a/Cython/Utility/Profile.c

+ +++ b/Cython/Utility/Profile.c

+ @@ -298,7 +298,7 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code,

+      tstate->tracing--;

+      if (retval) {

+          __Pyx_ErrRestoreInState(tstate, type, value, traceback);

+ -        return tstate->use_tracing && retval;

+ +        return __Pyx_IsTracing(tstate, 0, 0) && retval;

+      } else {

+          Py_XDECREF(type);

+          Py_XDECREF(value);

file modified
+4
@@ -13,6 +13,10 @@ 

  URL:            http://www.cython.org

  Source:         https://github.com/cython/cython/archive/%{version}/Cython-%{version}.tar.gz

  

+ # Adapt tracing code to Python 3.10, 2 commits

+ Patch1:         https://github.com/cython/cython/commit/fa5d2f5bc7.patch

+ Patch2:         https://github.com/cython/cython/commit/8d177f4aa5.patch

+ 

  BuildRequires:  python3-devel

  BuildRequires:  python3-setuptools

  

file added
+213
@@ -0,0 +1,213 @@ 

+ From fa5d2f5bc7c8ffbc7f80971cd7e93085f77b61f2 Mon Sep 17 00:00:00 2001

+ From: Stefan Behnel <stefan_ml@behnel.de>

+ Date: Fri, 14 May 2021 19:39:58 +0200

+ Subject: [PATCH] Adapt tracing code to Py3.10 beta 1.

+ 

+ ---

+  Cython/Utility/Profile.c | 79 +++++++++++++++++++++++++---------------

+  1 file changed, 49 insertions(+), 30 deletions(-)

+ 

+ diff --git a/Cython/Utility/Profile.c b/Cython/Utility/Profile.c

+ index 5f2de7e54b..3134aa0403 100644

+ --- a/Cython/Utility/Profile.c

+ +++ b/Cython/Utility/Profile.c

+ @@ -47,13 +47,32 @@

+      #define CYTHON_FRAME_DEL(frame) Py_CLEAR(frame)

+    #endif

+  

+ -  #define __Pyx_TraceDeclarations                                     \

+ -  static PyCodeObject *$frame_code_cname = NULL;                      \

+ -  CYTHON_FRAME_MODIFIER PyFrameObject *$frame_cname = NULL;           \

+ -  int __Pyx_use_tracing = 0;

+ +  #define __Pyx_TraceDeclarations                                         \

+ +      static PyCodeObject *$frame_code_cname = NULL;                      \

+ +      CYTHON_FRAME_MODIFIER PyFrameObject *$frame_cname = NULL;           \

+ +      int __Pyx_use_tracing = 0;

+  

+ -  #define __Pyx_TraceFrameInit(codeobj)                               \

+ -  if (codeobj) $frame_code_cname = (PyCodeObject*) codeobj;

+ +  #define __Pyx_TraceFrameInit(codeobj)                                   \

+ +      if (codeobj) $frame_code_cname = (PyCodeObject*) codeobj;

+ +

+ +#if PY_VERSION_HEX >= 0x030a00b1

+ +  #define __Pyx_IsTracing(tstate, check_tracing, check_funcs) \

+ +     (unlikely(tstate->cframe->use_tracing) && \

+ +         (!(check_tracing) || !tstate->tracing) && \

+ +         (!(check_funcs) || tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)))

+ +

+ +  #define __Pyx_SetTracing(tstate, enable) \

+ +      (tstate)->cframe->use_tracing = (enable)

+ +

+ +#else

+ +  #define __Pyx_IsTracing(tstate, check_tracing, check_funcs) \

+ +     (unlikely(tstate->use_tracing) && \

+ +         (!(check_tracing) || !tstate->tracing) && \

+ +         (!(check_funcs) || tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)))

+ +

+ +  #define __Pyx_SetTracing(tstate, enable) \

+ +      (tstate)->use_tracing = (enable)

+ +#endif

+  

+    #ifdef WITH_THREAD

+    #define __Pyx_TraceCall(funcname, srcfile, firstlineno, nogil, goto_error)             \

+ @@ -62,8 +81,7 @@

+            PyThreadState *tstate;                                                         \

+            PyGILState_STATE state = PyGILState_Ensure();                                  \

+            tstate = __Pyx_PyThreadState_Current;                                          \

+ -          if (unlikely(tstate->use_tracing) && !tstate->tracing &&                       \

+ -                  (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) {    \

+ +          if (__Pyx_IsTracing(tstate, 1, 1)) {                                           \

+                __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno);  \

+            }                                                                              \

+            PyGILState_Release(state);                                                     \

+ @@ -71,8 +89,7 @@

+        }                                                                                  \

+    } else {                                                                               \

+        PyThreadState* tstate = PyThreadState_GET();                                       \

+ -      if (unlikely(tstate->use_tracing) && !tstate->tracing &&                           \

+ -              (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) {        \

+ +      if (__Pyx_IsTracing(tstate, 1, 1)) {                                               \

+            __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno);  \

+            if (unlikely(__Pyx_use_tracing < 0)) goto_error;                               \

+        }                                                                                  \

+ @@ -80,8 +97,7 @@

+    #else

+    #define __Pyx_TraceCall(funcname, srcfile, firstlineno, nogil, goto_error)             \

+    {   PyThreadState* tstate = PyThreadState_GET();                                       \

+ -      if (unlikely(tstate->use_tracing) && !tstate->tracing &&                           \

+ -              (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) {        \

+ +      if (__Pyx_IsTracing(tstate, 1, 1)) {                                               \

+            __Pyx_use_tracing = __Pyx_TraceSetupAndCall(&$frame_code_cname, &$frame_cname, tstate, funcname, srcfile, firstlineno);  \

+            if (unlikely(__Pyx_use_tracing < 0)) goto_error;                               \

+        }                                                                                  \

+ @@ -91,10 +107,9 @@

+    #define __Pyx_TraceException()                                                           \

+    if (likely(!__Pyx_use_tracing)); else {                                                  \

+        PyThreadState* tstate = __Pyx_PyThreadState_Current;                                 \

+ -      if (tstate->use_tracing &&                                                           \

+ -              (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc))) {          \

+ +      if (__Pyx_IsTracing(tstate, 0, 1)) {                                                 \

+            tstate->tracing++;                                                               \

+ -          tstate->use_tracing = 0;                                                         \

+ +          __Pyx_SetTracing(tstate, 0);                                                     \

+            PyObject *exc_info = __Pyx_GetExceptionTuple(tstate);                            \

+            if (exc_info) {                                                                  \

+                if (CYTHON_TRACE && tstate->c_tracefunc)                                     \

+ @@ -104,7 +119,7 @@

+                    tstate->c_profileobj, $frame_cname, PyTrace_EXCEPTION, exc_info);        \

+                Py_DECREF(exc_info);                                                         \

+            }                                                                                \

+ -          tstate->use_tracing = 1;                                                         \

+ +          __Pyx_SetTracing(tstate, 1);                                                     \

+            tstate->tracing--;                                                               \

+        }                                                                                    \

+    }

+ @@ -113,13 +128,13 @@

+        PyObject *type, *value, *traceback;

+        __Pyx_ErrFetchInState(tstate, &type, &value, &traceback);

+        tstate->tracing++;

+ -      tstate->use_tracing = 0;

+ +      __Pyx_SetTracing(tstate, 0);

+        if (CYTHON_TRACE && tstate->c_tracefunc)

+            tstate->c_tracefunc(tstate->c_traceobj, frame, PyTrace_RETURN, result);

+        if (tstate->c_profilefunc)

+            tstate->c_profilefunc(tstate->c_profileobj, frame, PyTrace_RETURN, result);

+        CYTHON_FRAME_DEL(frame);

+ -      tstate->use_tracing = 1;

+ +      __Pyx_SetTracing(tstate, 1);

+        tstate->tracing--;

+        __Pyx_ErrRestoreInState(tstate, type, value, traceback);

+    }

+ @@ -132,14 +147,14 @@

+                PyThreadState *tstate;                                                      \

+                PyGILState_STATE state = PyGILState_Ensure();                               \

+                tstate = __Pyx_PyThreadState_Current;                                       \

+ -              if (tstate->use_tracing) {                                                  \

+ +              if (__Pyx_IsTracing(tstate, 0, 0)) {                                        \

+                    __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result);  \

+                }                                                                           \

+                PyGILState_Release(state);                                                  \

+            }                                                                               \

+        } else {                                                                            \

+            PyThreadState* tstate = __Pyx_PyThreadState_Current;                            \

+ -          if (tstate->use_tracing) {                                                      \

+ +          if (__Pyx_IsTracing(tstate, 0, 0)) {                                            \

+                __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result);      \

+            }                                                                               \

+        }                                                                                   \

+ @@ -148,7 +163,7 @@

+    #define __Pyx_TraceReturn(result, nogil)                                                \

+    if (likely(!__Pyx_use_tracing)); else {                                                 \

+        PyThreadState* tstate = __Pyx_PyThreadState_Current;                                \

+ -      if (tstate->use_tracing) {                                                          \

+ +      if (__Pyx_IsTracing(tstate, 0, 0)) {                                                \

+            __Pyx_call_return_trace_func(tstate, $frame_cname, (PyObject*)result);          \

+        }                                                                                   \

+    }

+ @@ -176,9 +191,11 @@

+        __Pyx_ErrFetchInState(tstate, &type, &value, &traceback);

+        __Pyx_PyFrame_SetLineNumber(frame, lineno);

+        tstate->tracing++;

+ -      tstate->use_tracing = 0;

+ +      __Pyx_SetTracing(tstate, 0);

+ +

+        ret = tstate->c_tracefunc(tstate->c_traceobj, frame, PyTrace_LINE, NULL);

+ -      tstate->use_tracing = 1;

+ +

+ +      __Pyx_SetTracing(tstate, 1);

+        tstate->tracing--;

+        if (likely(!ret)) {

+            __Pyx_ErrRestoreInState(tstate, type, value, traceback);

+ @@ -199,7 +216,7 @@

+                PyThreadState *tstate;                                                       \

+                PyGILState_STATE state = PyGILState_Ensure();                                \

+                tstate = __Pyx_PyThreadState_Current;                                        \

+ -              if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \

+ +              if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \

+                    ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno);          \

+                }                                                                            \

+                PyGILState_Release(state);                                                   \

+ @@ -207,7 +224,7 @@

+            }                                                                                \

+        } else {                                                                             \

+            PyThreadState* tstate = __Pyx_PyThreadState_Current;                             \

+ -          if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \

+ +          if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \

+                int ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno);          \

+                if (unlikely(ret)) goto_error;                                               \

+            }                                                                                \

+ @@ -217,7 +234,7 @@

+    #define __Pyx_TraceLine(lineno, nogil, goto_error)                                       \

+    if (likely(!__Pyx_use_tracing)); else {                                                  \

+        PyThreadState* tstate = __Pyx_PyThreadState_Current;                                 \

+ -      if (unlikely(tstate->use_tracing && tstate->c_tracefunc && $frame_cname->f_trace)) { \

+ +      if (__Pyx_IsTracing(tstate, 0, 0) && tstate->c_tracefunc && $frame_cname->f_trace) { \

+            int ret = __Pyx_call_line_trace_func(tstate, $frame_cname, lineno);              \

+            if (unlikely(ret)) goto_error;                                                   \

+        }                                                                                    \

+ @@ -263,19 +280,21 @@ static int __Pyx_TraceSetupAndCall(PyCodeObject** code,

+          (*frame)->f_tstate = tstate;

+  #endif

+      }

+ -      __Pyx_PyFrame_SetLineNumber(*frame, firstlineno);

+ +    __Pyx_PyFrame_SetLineNumber(*frame, firstlineno);

+ +

+      retval = 1;

+      tstate->tracing++;

+ -    tstate->use_tracing = 0;

+ +    __Pyx_SetTracing(tstate, 0);

+      __Pyx_ErrFetchInState(tstate, &type, &value, &traceback);

+ +

+      #if CYTHON_TRACE

+      if (tstate->c_tracefunc)

+          retval = tstate->c_tracefunc(tstate->c_traceobj, *frame, PyTrace_CALL, NULL) == 0;

+      if (retval && tstate->c_profilefunc)

+      #endif

+          retval = tstate->c_profilefunc(tstate->c_profileobj, *frame, PyTrace_CALL, NULL) == 0;

+ -    tstate->use_tracing = (tstate->c_profilefunc ||

+ -                           (CYTHON_TRACE && tstate->c_tracefunc));

+ +

+ +    __Pyx_SetTracing(tstate, (tstate->c_profilefunc || (CYTHON_TRACE && tstate->c_tracefunc)));

+      tstate->tracing--;

+      if (retval) {

+          __Pyx_ErrRestoreInState(tstate, type, value, traceback);

Build failed. More information on how to proceed and troubleshoot errors available at https://fedoraproject.org/wiki/Zuul-based-ci

This fixes the problem. rpmlint errors not introduced here.

Pull-Request has been merged by churchyard

2 years ago