Skip to content

Commit b78754d

Browse files
committed
Disable sysmonitoring support (added in cython 3.1, apparently it causes segfaults). Move around some declarations.
1 parent e1c6667 commit b78754d

4 files changed

Lines changed: 36 additions & 32 deletions

File tree

setup.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,12 @@
2222
except ImportError:
2323
Cython = None
2424

25+
2526
# Enable code coverage for C code: we cannot use CFLAGS=-coverage in tox.ini, since that may mess with compiling
2627
# dependencies (e.g. numpy). Therefore, we set SETUPPY_CFLAGS=-coverage in tox.ini and copy it to CFLAGS here (after
2728
# deps have been safely installed).
2829
if 'TOX_ENV_NAME' in os.environ and os.environ.get('SETUPPY_EXT_COVERAGE') == 'yes':
29-
CFLAGS = os.environ['CFLAGS'] = '-DCYTHON_TRACE=1'
30+
CFLAGS = os.environ['CFLAGS'] = '-DCYTHON_TRACE=1 -DCYTHON_USE_SYS_MONITORING=0'
3031
LFLAGS = os.environ['LFLAGS'] = ''
3132
else:
3233
CFLAGS = ''

src/hunter/_event.pxd

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,39 @@
11
cimport cython
22

3-
from ._tracer cimport *
43

4+
ctypedef extern FrameType
55

66
cdef extern from *:
7-
int PyFrame_GetLineNumber(PyFrameObject *frame)
7+
ctypedef extern class types.CodeType[object PyCodeObject, check_size ignore]:
8+
cdef object co_filename
9+
cdef object co_name
10+
cdef int co_argcount
11+
12+
cdef extern from "vendor/_compat.h":
13+
"""
14+
static inline PyCodeObject* Hunter_PyFrame_GetCode(PyObject* frame) {
15+
return PyFrame_GetCode((PyFrameObject*) frame);
16+
}
17+
static inline int Hunter_PyFrame_GetLasti(PyObject* frame) {
18+
return PyFrame_GetLasti((PyFrameObject*) frame);
19+
}
20+
static inline int Hunter_PyFrame_GetLineNumber(PyObject* frame) {
21+
return PyFrame_GetLineNumber((PyFrameObject*) frame);
22+
}
23+
static inline PyObject* Hunter_PyFrame_GetGlobals(PyObject* frame) {
24+
return PyFrame_GetGlobals((PyFrameObject*) frame);
25+
}
26+
static inline PyObject* Hunter_PyFrame_GetLocals(PyObject* frame) {
27+
return PyFrame_GetLocals((PyFrameObject*) frame);
28+
}
29+
"""
30+
object PyCode_GetCode(CodeType)
31+
object PyCode_GetVarnames(CodeType)
32+
CodeType Hunter_PyFrame_GetCode(FrameType frame)
33+
int Hunter_PyFrame_GetLasti(FrameType frame)
34+
int Hunter_PyFrame_GetLineNumber(FrameType frame)
35+
object Hunter_PyFrame_GetGlobals(FrameType frame)
36+
object Hunter_PyFrame_GetLocals(FrameType frame)
837

938

1039
@cython.final

src/hunter/_tracer.pxd

Lines changed: 1 addition & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,10 @@
11
# cython: language_level=3str
22
cimport cython
33
from cpython.pystate cimport Py_tracefunc
4-
from cpython.pystate cimport PyFrameObject
54
from cpython.ref cimport PyObject
65

7-
ctypedef extern FrameType
8-
9-
cdef extern from "vendor/_compat.h":
10-
"""
11-
static inline PyCodeObject* Hunter_PyFrame_GetCode(PyObject* frame) {
12-
return PyFrame_GetCode((PyFrameObject*) frame);
13-
}
14-
static inline int Hunter_PyFrame_GetLasti(PyObject* frame) {
15-
return PyFrame_GetLasti((PyFrameObject*) frame);
16-
}
17-
static inline int Hunter_PyFrame_GetLineNumber(PyObject* frame) {
18-
return PyFrame_GetLineNumber((PyFrameObject*) frame);
19-
}
20-
static inline PyObject* Hunter_PyFrame_GetGlobals(PyObject* frame) {
21-
return PyFrame_GetGlobals((PyFrameObject*) frame);
22-
}
23-
static inline PyObject* Hunter_PyFrame_GetLocals(PyObject* frame) {
24-
return PyFrame_GetLocals((PyFrameObject*) frame);
25-
}
26-
"""
27-
object PyCode_GetCode(CodeType)
28-
object PyCode_GetVarnames(CodeType)
29-
CodeType Hunter_PyFrame_GetCode(FrameType frame)
30-
int Hunter_PyFrame_GetLasti(FrameType frame)
31-
int Hunter_PyFrame_GetLineNumber(FrameType frame)
32-
object Hunter_PyFrame_GetGlobals(FrameType frame)
33-
object Hunter_PyFrame_GetLocals(FrameType frame)
346

7+
ctypedef extern FrameType
358

369
cdef extern from *:
3710
void PyEval_SetTrace(Py_tracefunc, PyObject*)

src/hunter/_tracer.pyx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import threading
33
import traceback
44

55
from cpython.pystate cimport PyThreadState_Get
6+
from cpython.pystate cimport PyFrameObject
67
from ._event cimport Event
78
from ._predicates cimport fast_call
89

@@ -20,7 +21,7 @@ cdef dict KIND_INTS = {
2021
'c_return': 6,
2122
}
2223

23-
cdef inline int trace_func(PyObject* tracer, PyFrameObject* frame, int kind, PyObject* arg) noexcept:
24+
cdef int trace_func(PyObject* tracer, PyFrameObject* frame, int kind, PyObject* arg) noexcept:
2425
cdef Tracer self = <Tracer?> tracer
2526

2627
handler = self.handler

0 commit comments

Comments
 (0)