@@ -26,15 +26,9 @@ from pandas._libs.util cimport (
2626 is_integer_object,
2727)
2828
29- # At the top of the file:
30- DEF CYTHON_COMPATIBLE_WITH_FREE_THREADING = False # Or import from external config as needed
29+ # Use object-based weakref API (works across Cython versions)
30+ from cpython.weakref cimport PyWeakref_GetObject
3131
32- IF CYTHON_COMPATIBLE_WITH_FREE_THREADING:
33- from cpython.ref cimport Py_DECREF
34- from cpython.weakref cimport PyWeakref_GetRef
35- else :
36- from cpython.weakref cimport PyWeakref_GetObject
37-
3832
3933cdef extern from " Python.h" :
4034 PyObject* Py_None
@@ -914,26 +908,13 @@ cdef class BlockValuesRefs:
914908 # if force=False. Clearing for every insertion causes slowdowns if
915909 # all these objects stay alive, e.g. df.items() for wide DataFrames
916910 # see GH#55245 and GH#55008
917- IF CYTHON_COMPATIBLE_WITH_FREE_THREADING:
918- cdef PyObject* pobj
919- cdef bint status
920-
921- if force or len (self .referenced_blocks) > self .clear_counter:
922- IF CYTHON_COMPATIBLE_WITH_FREE_THREADING:
923- new_referenced_blocks = []
924- for ref in self .referenced_blocks:
925- status = PyWeakref_GetRef(ref, & pobj)
926- if status == - 1 :
927- return
928- elif status == 1 :
929- new_referenced_blocks.append(ref)
930- Py_DECREF(< object > pobj)
931- self .referenced_blocks = new_referenced_blocks
932- ELSE :
933- self .referenced_blocks = [
934- ref for ref in self .referenced_blocks
935- if PyWeakref_GetObject(ref) != Py_None
936- ]
911+ # No compile-time IF: always use object-based weakref check
912+ if force or len (self .referenced_blocks) > self .clear_counter:
913+ new_referenced_blocks = []
914+ for ref in self .referenced_blocks:
915+ if PyWeakref_GetObject(ref) != Py_None:
916+ new_referenced_blocks.append(ref)
917+ self .referenced_blocks = new_referenced_blocks
937918
938919 nr_of_refs = len (self .referenced_blocks)
939920 if nr_of_refs < self .clear_counter // 2 :
@@ -953,11 +934,12 @@ cdef class BlockValuesRefs:
953934 blk : Block
954935 The block that the new references should point to.
955936 """
956- IF CYTHON_COMPATIBLE_WITH_FREE_THREADING:
957- with cython.critical_section(self ):
958- self ._add_reference_maybe_locked(blk)
959- ELSE :
960- self ._add_reference_maybe_locked(blk)
937+ try :
938+ with cython.critical_section(self ):
939+ self ._add_reference_maybe_locked(blk)
940+ except AttributeError :
941+ # Older Cython/runtime: fall back
942+ self ._add_reference_maybe_locked(blk)
961943
962944 def _add_index_reference_maybe_locked (self , index: object ) -> None:
963945 self._clear_dead_references()
0 commit comments