@@ -756,7 +756,7 @@ _hmac_new_impl(PyObject *module, PyObject *keyobj, PyObject *msgobj,
756756 return NULL ;
757757 }
758758
759- HMACObject * self = PyObject_New (HMACObject , state -> hmac_type );
759+ HMACObject * self = PyObject_GC_New (HMACObject , state -> hmac_type );
760760 if (self == NULL ) {
761761 return NULL ;
762762 }
@@ -791,6 +791,7 @@ _hmac_new_impl(PyObject *module, PyObject *keyobj, PyObject *msgobj,
791791#endif
792792 }
793793 assert (rc == 0 );
794+ PyObject_GC_Track (self );
794795 return (PyObject * )self ;
795796
796797error_on_key :
@@ -851,7 +852,7 @@ _hmac_HMAC_copy_impl(HMACObject *self, PyTypeObject *cls)
851852/*[clinic end generated code: output=a955bfa55b65b215 input=17b2c0ad0b147e36]*/
852853{
853854 hmacmodule_state * state = get_hmacmodule_state_by_cls (cls );
854- HMACObject * copy = PyObject_New (HMACObject , state -> hmac_type );
855+ HMACObject * copy = PyObject_GC_New (HMACObject , state -> hmac_type );
855856 if (copy == NULL ) {
856857 return NULL ;
857858 }
@@ -869,6 +870,7 @@ _hmac_HMAC_copy_impl(HMACObject *self, PyTypeObject *cls)
869870 }
870871
871872 HASHLIB_INIT_MUTEX (copy );
873+ PyObject_GC_Track (copy );
872874 return (PyObject * )copy ;
873875}
874876
@@ -1024,6 +1026,7 @@ static void
10241026HMACObject_dealloc (PyObject * op )
10251027{
10261028 PyTypeObject * type = Py_TYPE (op );
1029+ PyObject_GC_UnTrack (op );
10271030 (void )HMACObject_clear (op );
10281031 type -> tp_free (op );
10291032 Py_DECREF (type );
@@ -1048,7 +1051,9 @@ static PyType_Slot HMACObject_Type_slots[] = {
10481051 {Py_tp_repr , HMACObject_repr },
10491052 {Py_tp_methods , HMACObject_methods },
10501053 {Py_tp_getset , HMACObject_getsets },
1054+ {Py_tp_clear , HMACObject_clear },
10511055 {Py_tp_dealloc , HMACObject_dealloc },
1056+ {Py_tp_traverse , _PyObject_VisitType },
10521057 {0 , NULL } /* sentinel */
10531058};
10541059
@@ -1058,7 +1063,8 @@ static PyType_Spec HMAC_Type_spec = {
10581063 .flags = Py_TPFLAGS_DEFAULT
10591064 | Py_TPFLAGS_DISALLOW_INSTANTIATION
10601065 | Py_TPFLAGS_HEAPTYPE
1061- | Py_TPFLAGS_IMMUTABLETYPE ,
1066+ | Py_TPFLAGS_IMMUTABLETYPE
1067+ | Py_TPFLAGS_HAVE_GC ,
10621068 .slots = HMACObject_Type_slots ,
10631069};
10641070
0 commit comments