@@ -126,10 +126,18 @@ get_mmap_state(PyObject *module)
126
126
return state ;
127
127
}
128
128
129
+ static int
130
+ mmap_object_traverse (mmap_object * m_obj , visitproc visit , void * arg )
131
+ {
132
+ Py_VISIT (Py_TYPE (m_obj ));
133
+ return 0 ;
134
+ }
135
+
129
136
static void
130
137
mmap_object_dealloc (mmap_object * m_obj )
131
138
{
132
139
PyTypeObject * tp = Py_TYPE (m_obj );
140
+ PyObject_GC_UnTrack (m_obj );
133
141
134
142
#ifdef MS_WINDOWS
135
143
Py_BEGIN_ALLOW_THREADS
@@ -1085,15 +1093,14 @@ To map anonymous memory, pass -1 as the fileno (both versions).");
1085
1093
1086
1094
static PyType_Slot mmap_object_slots [] = {
1087
1095
{Py_tp_new , new_mmap_object },
1088
- {Py_tp_alloc , PyType_GenericAlloc },
1089
1096
{Py_tp_dealloc , mmap_object_dealloc },
1090
- {Py_tp_free , PyObject_Del },
1091
1097
{Py_tp_repr , mmap__repr__method },
1092
1098
{Py_tp_doc , (void * )mmap_doc },
1093
1099
{Py_tp_methods , mmap_object_methods },
1094
1100
{Py_tp_members , mmap_object_members },
1095
1101
{Py_tp_getset , mmap_object_getset },
1096
1102
{Py_tp_getattro , PyObject_GenericGetAttr },
1103
+ {Py_tp_traverse , mmap_object_traverse },
1097
1104
1098
1105
/* as sequence */
1099
1106
{Py_sq_length , mmap_length },
@@ -1114,7 +1121,7 @@ static PyType_Slot mmap_object_slots[] = {
1114
1121
static PyType_Spec mmap_object_spec = {
1115
1122
.name = "mmap.mmap" ,
1116
1123
.basicsize = sizeof (mmap_object ),
1117
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE ,
1124
+ .flags = ( Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC ) ,
1118
1125
.slots = mmap_object_slots ,
1119
1126
};
1120
1127
0 commit comments