Skip to content

Commit e8172b4

Browse files
committed
Use Py_REFCNT over ob_refcnt for reference count checks
Fixes ``` FAILED: [code=1] src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/meson-generated_src_cysignals_signals.pyx.c.o cc -Isrc/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p -Isrc/cysignals -I../src/cysignals -Isrc -I../src -I/opt/_internal/cpython-3.14.0rc2-nogil/include/python3.14t -fvisibility=hidden -fdiagnostics-color=always -DNDEBUG -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Wextra -O3 -DCYTHON_CLINE_IN_TRACEBACK=0 -U_FORTIFY_SOURCE -fPIC -pthread -MD -MQ src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/meson-generated_src_cysignals_signals.pyx.c.o -MF src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/meson-generated_src_cysignals_signals.pyx.c.o.d -o src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/meson-generated_src_cysignals_signals.pyx.c.o -c src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/src/cysignals/signals.pyx.c src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/src/cysignals/signals.pyx.c: In function ‘__pyx_f_9cysignals_7signals_verify_exc_value’: src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/src/cysignals/signals.pyx.c:4699:32: error: ‘PyObject’ {aka ‘struct _object’} has no member named ‘ob_refcnt’ 4699 | __pyx_t_1 = (cysigs.exc_value->ob_refcnt == 1); | ^~ src/cysignals/signals.cpython-314t-x86_64-linux-gnu.so.p/src/cysignals/signals.pyx.c:4996:33: error: ‘PyObject’ {aka ‘struct _object’} has no member named ‘ob_refcnt’ 4996 | __pyx_t_10 = (cysigs.exc_value->ob_refcnt == 1); | ^~ ```
1 parent 113d124 commit e8172b4

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

src/cysignals/signals.pyx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ See ``tests.pyx`` for extensive tests.
2525

2626
from libc.signal cimport *
2727
from libc.stdio cimport freopen, stdin
28-
from cpython.ref cimport Py_XINCREF, Py_CLEAR
28+
from cpython.ref cimport Py_XINCREF, Py_CLEAR, _Py_REFCNT
2929
from cpython.exc cimport (PyErr_Occurred, PyErr_NormalizeException,
3030
PyErr_Fetch, PyErr_Restore)
3131
from cpython.version cimport PY_MAJOR_VERSION
@@ -360,7 +360,7 @@ cdef void verify_exc_value() noexcept:
360360
Check that ``cysigs.exc_value`` is still the exception being raised.
361361
Clear ``cysigs.exc_value`` if not.
362362
"""
363-
if cysigs.exc_value.ob_refcnt == 1:
363+
if cysigs.exc_value != NULL and _Py_REFCNT(cysigs.exc_value) == 1:
364364
# No other references => exception is certainly gone
365365
Py_CLEAR(cysigs.exc_value)
366366
return
@@ -408,5 +408,5 @@ cdef void verify_exc_value() noexcept:
408408
# Make sure we still have cysigs.exc_value at all; if this function was
409409
# called again during garbage collection it might have already been set
410410
# to NULL; see https://github.com/sagemath/cysignals/issues/126
411-
if cysigs.exc_value != NULL and cysigs.exc_value.ob_refcnt == 1:
411+
if cysigs.exc_value != NULL and _Py_REFCNT(cysigs.exc_value) == 1:
412412
Py_CLEAR(cysigs.exc_value)

0 commit comments

Comments
 (0)