@@ -310,17 +310,26 @@ sha1_get_state(PyObject *module)
310
310
static SHA1object *
311
311
newSHA1object (SHA1State * st )
312
312
{
313
- return (SHA1object * )PyObject_New (SHA1object , st -> sha1_type );
313
+ SHA1object * sha = (SHA1object * )PyObject_GC_New (SHA1object , st -> sha1_type );
314
+ PyObject_GC_Track (sha );
315
+ return sha ;
314
316
}
315
317
316
318
317
319
/* Internal methods for a hash object */
320
+ static int
321
+ SHA1_traverse (PyObject * ptr , visitproc visit , void * arg )
322
+ {
323
+ Py_VISIT (Py_TYPE (ptr ));
324
+ return 0 ;
325
+ }
318
326
319
327
static void
320
328
SHA1_dealloc (PyObject * ptr )
321
329
{
322
330
PyTypeObject * tp = Py_TYPE (ptr );
323
- PyObject_Free (ptr );
331
+ PyObject_GC_UnTrack (ptr );
332
+ PyObject_GC_Del (ptr );
324
333
Py_DECREF (tp );
325
334
}
326
335
@@ -456,13 +465,15 @@ static PyType_Slot sha1_type_slots[] = {
456
465
{Py_tp_dealloc , SHA1_dealloc },
457
466
{Py_tp_methods , SHA1_methods },
458
467
{Py_tp_getset , SHA1_getseters },
468
+ {Py_tp_traverse , SHA1_traverse },
459
469
{0 ,0 }
460
470
};
461
471
462
472
static PyType_Spec sha1_type_spec = {
463
473
.name = "_sha1.sha1" ,
464
474
.basicsize = sizeof (SHA1object ),
465
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
475
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
476
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
466
477
.slots = sha1_type_slots
467
478
};
468
479
0 commit comments