@@ -1495,10 +1495,26 @@ Struct___init___impl(PyStructObject *self, PyObject *format)
14951495returnret;
14961496}
149714971498+staticint
1499+s_clear(PyStructObject*s)
1500+{
1501+Py_CLEAR(s->s_format);
1502+return0;
1503+}
1504+1505+staticint
1506+s_traverse(PyStructObject*s, visitprocvisit, void*arg)
1507+{
1508+Py_VISIT(Py_TYPE(s));
1509+Py_VISIT(s->s_format);
1510+return0;
1511+}
1512+14981513staticvoid
14991514s_dealloc(PyStructObject*s)
15001515{
15011516PyTypeObject*tp=Py_TYPE(s);
1517+PyObject_GC_UnTrack(s);
15021518if (s->weakreflist!=NULL)
15031519PyObject_ClearWeakRefs((PyObject*)s);
15041520if (s->s_codes!=NULL) {
@@ -2079,21 +2095,23 @@ static PyType_Slot PyStructType_slots[] = {
20792095 {Py_tp_getattro, PyObject_GenericGetAttr},
20802096 {Py_tp_setattro, PyObject_GenericSetAttr},
20812097 {Py_tp_doc, (void*)s__doc__},
2098+ {Py_tp_traverse, s_traverse},
2099+ {Py_tp_clear, s_clear},
20822100 {Py_tp_methods, s_methods},
20832101 {Py_tp_members, s_members},
20842102 {Py_tp_getset, s_getsetlist},
20852103 {Py_tp_init, Struct___init__},
20862104 {Py_tp_alloc, PyType_GenericAlloc},
20872105 {Py_tp_new, s_new},
2088- {Py_tp_free, PyObject_Del},
2106+ {Py_tp_free, PyObject_GC_Del},
20892107 {0, 0},
20902108};
2091210920922110staticPyType_SpecPyStructType_spec= {
20932111"_struct.Struct",
20942112sizeof(PyStructObject),
209521130,
2096-Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
2114+Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_BASETYPE,
20972115PyStructType_slots
20982116};
20992117