@@ -661,10 +661,18 @@ ins1(arrayobject *self, Py_ssize_t where, PyObject *v)
661
661
662
662
/* Methods */
663
663
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
+
664
671
static void
665
672
array_dealloc (arrayobject * op )
666
673
{
667
674
PyTypeObject * tp = Py_TYPE (op );
675
+ PyObject_GC_UnTrack (op );
668
676
669
677
if (op -> weakreflist != NULL )
670
678
PyObject_ClearWeakRefs ((PyObject * ) op );
@@ -2820,7 +2828,7 @@ static PyType_Slot array_slots[] = {
2820
2828
{Py_tp_getset , array_getsets },
2821
2829
{Py_tp_alloc , PyType_GenericAlloc },
2822
2830
{Py_tp_new , array_new },
2823
- {Py_tp_free , PyObject_Del },
2831
+ {Py_tp_traverse , array_tp_traverse },
2824
2832
2825
2833
/* as sequence */
2826
2834
{Py_sq_length , array_length },
@@ -2848,7 +2856,7 @@ static PyType_Spec array_spec = {
2848
2856
.name = "array.array" ,
2849
2857
.basicsize = sizeof (arrayobject ),
2850
2858
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
2851
- Py_TPFLAGS_IMMUTABLETYPE |
2859
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC |
2852
2860
Py_TPFLAGS_SEQUENCE ),
2853
2861
.slots = array_slots ,
2854
2862
};
@@ -2922,6 +2930,7 @@ arrayiter_dealloc(arrayiterobject *it)
2922
2930
static int
2923
2931
arrayiter_traverse (arrayiterobject * it , visitproc visit , void * arg )
2924
2932
{
2933
+ Py_VISIT (Py_TYPE (it ));
2925
2934
Py_VISIT (it -> ao );
2926
2935
return 0 ;
2927
2936
}
0 commit comments