@@ -1496,10 +1496,26 @@ Struct___init___impl(PyStructObject *self, PyObject *format)
14961496returnret;
14971497}
149814981499+staticint
1500+s_clear(PyStructObject*s)
1501+{
1502+Py_CLEAR(s->s_format);
1503+return0;
1504+}
1505+1506+staticint
1507+s_traverse(PyStructObject*s, visitprocvisit, void*arg)
1508+{
1509+Py_VISIT(Py_TYPE(s));
1510+Py_VISIT(s->s_format);
1511+return0;
1512+}
1513+14991514staticvoid
15001515s_dealloc(PyStructObject*s)
15011516{
15021517PyTypeObject*tp=Py_TYPE(s);
1518+PyObject_GC_UnTrack(s);
15031519if (s->weakreflist!=NULL)
15041520PyObject_ClearWeakRefs((PyObject*)s);
15051521if (s->s_codes!=NULL) {
@@ -2078,21 +2094,23 @@ static PyType_Slot PyStructType_slots[] = {
20782094 {Py_tp_getattro, PyObject_GenericGetAttr},
20792095 {Py_tp_setattro, PyObject_GenericSetAttr},
20802096 {Py_tp_doc, (void*)s__doc__},
2097+ {Py_tp_traverse, s_traverse},
2098+ {Py_tp_clear, s_clear},
20812099 {Py_tp_methods, s_methods},
20822100 {Py_tp_members, s_members},
20832101 {Py_tp_getset, s_getsetlist},
20842102 {Py_tp_init, Struct___init__},
20852103 {Py_tp_alloc, PyType_GenericAlloc},
20862104 {Py_tp_new, s_new},
2087- {Py_tp_free, PyObject_Del},
2105+ {Py_tp_free, PyObject_GC_Del},
20882106 {0, 0},
20892107};
2090210820912109staticPyType_SpecPyStructType_spec= {
20922110"_struct.Struct",
20932111sizeof(PyStructObject),
209421120,
2095-Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
2113+Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
20962114PyStructType_slots
20972115};
20982116