@@ -382,22 +382,35 @@ sha_final(unsigned char digest[SHA_DIGESTSIZE], SHAobject *sha_info)
382
382
static SHAobject *
383
383
newSHA224object (_sha256_state * state )
384
384
{
385
- return (SHAobject * )PyObject_New (SHAobject , state -> sha224_type );
385
+ SHAobject * sha = (SHAobject * )PyObject_GC_New (SHAobject ,
386
+ state -> sha224_type );
387
+ PyObject_GC_Track (sha );
388
+ return sha ;
386
389
}
387
390
388
391
static SHAobject *
389
392
newSHA256object (_sha256_state * state )
390
393
{
391
- return (SHAobject * )PyObject_New (SHAobject , state -> sha256_type );
394
+ SHAobject * sha = (SHAobject * )PyObject_GC_New (SHAobject ,
395
+ state -> sha256_type );
396
+ PyObject_GC_Track (sha );
397
+ return sha ;
392
398
}
393
399
394
400
/* Internal methods for a hash object */
401
+ static int
402
+ SHA_traverse (PyObject * ptr , visitproc visit , void * arg )
403
+ {
404
+ Py_VISIT (Py_TYPE (ptr ));
405
+ return 0 ;
406
+ }
395
407
396
408
static void
397
409
SHA_dealloc (PyObject * ptr )
398
410
{
399
411
PyTypeObject * tp = Py_TYPE (ptr );
400
- PyObject_Free (ptr );
412
+ PyObject_GC_UnTrack (ptr );
413
+ PyObject_GC_Del (ptr );
401
414
Py_DECREF (tp );
402
415
}
403
416
@@ -538,20 +551,23 @@ static PyType_Slot sha256_types_slots[] = {
538
551
{Py_tp_methods , SHA_methods },
539
552
{Py_tp_members , SHA_members },
540
553
{Py_tp_getset , SHA_getseters },
554
+ {Py_tp_traverse , SHA_traverse },
541
555
{0 ,0 }
542
556
};
543
557
544
558
static PyType_Spec sha224_type_spec = {
545
559
.name = "_sha256.sha224" ,
546
560
.basicsize = sizeof (SHAobject ),
547
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
561
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
562
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
548
563
.slots = sha256_types_slots
549
564
};
550
565
551
566
static PyType_Spec sha256_type_spec = {
552
567
.name = "_sha256.sha256" ,
553
568
.basicsize = sizeof (SHAobject ),
554
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
569
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
570
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
555
571
.slots = sha256_types_slots
556
572
};
557
573
0 commit comments