@@ -661,10 +661,18 @@ ins1(arrayobject *self, Py_ssize_t where, PyObject *v)
661661
662662/* Methods */
663663
664+ static int
665+ array_tp_traverse (arrayobject * op , visitproc visit , void * arg )
666+ {
667+ Py_VISIT (Py_TYPE (op ));
668+ return 0 ;
669+ }
670+
664671static void
665672array_dealloc (arrayobject * op )
666673{
667674 PyTypeObject * tp = Py_TYPE (op );
675+ PyObject_GC_UnTrack (op );
668676
669677 if (op -> weakreflist != NULL )
670678 PyObject_ClearWeakRefs ((PyObject * ) op );
@@ -2820,7 +2828,7 @@ static PyType_Slot array_slots[] = {
28202828 {Py_tp_getset , array_getsets },
28212829 {Py_tp_alloc , PyType_GenericAlloc },
28222830 {Py_tp_new , array_new },
2823- {Py_tp_free , PyObject_Del },
2831+ {Py_tp_traverse , array_tp_traverse },
28242832
28252833 /* as sequence */
28262834 {Py_sq_length , array_length },
@@ -2848,7 +2856,7 @@ static PyType_Spec array_spec = {
28482856 .name = "array.array" ,
28492857 .basicsize = sizeof (arrayobject ),
28502858 .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
2851- Py_TPFLAGS_IMMUTABLETYPE |
2859+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC |
28522860 Py_TPFLAGS_SEQUENCE ),
28532861 .slots = array_slots ,
28542862};
@@ -2922,6 +2930,7 @@ arrayiter_dealloc(arrayiterobject *it)
29222930static int
29232931arrayiter_traverse (arrayiterobject * it , visitproc visit , void * arg )
29242932{
2933+ Py_VISIT (Py_TYPE (it ));
29252934 Py_VISIT (it -> ao );
29262935 return 0 ;
29272936}
0 commit comments