@@ -438,22 +438,33 @@ sha512_get_state(PyObject *module)
438
438
static SHAobject *
439
439
newSHA384object (SHA512State * st )
440
440
{
441
- return (SHAobject * )PyObject_New (SHAobject , st -> sha384_type );
441
+ SHAobject * sha = (SHAobject * )PyObject_GC_New (SHAobject , st -> sha384_type );
442
+ PyObject_GC_Track (sha );
443
+ return sha ;
442
444
}
443
445
444
446
static SHAobject *
445
447
newSHA512object (SHA512State * st )
446
448
{
447
- return (SHAobject * )PyObject_New (SHAobject , st -> sha512_type );
449
+ SHAobject * sha = (SHAobject * )PyObject_GC_New (SHAobject , st -> sha512_type );
450
+ PyObject_GC_Track (sha );
451
+ return sha ;
448
452
}
449
453
450
454
/* Internal methods for a hash object */
455
+ static int
456
+ SHA_traverse (PyObject * ptr , visitproc visit , void * arg )
457
+ {
458
+ Py_VISIT (Py_TYPE (ptr ));
459
+ return 0 ;
460
+ }
451
461
452
462
static void
453
463
SHA512_dealloc (PyObject * ptr )
454
464
{
455
465
PyTypeObject * tp = Py_TYPE (ptr );
456
- PyObject_Free (ptr );
466
+ PyObject_GC_UnTrack (ptr );
467
+ PyObject_GC_Del (ptr );
457
468
Py_DECREF (tp );
458
469
}
459
470
@@ -596,13 +607,15 @@ static PyType_Slot sha512_sha384_type_slots[] = {
596
607
{Py_tp_methods , SHA_methods },
597
608
{Py_tp_members , SHA_members },
598
609
{Py_tp_getset , SHA_getseters },
610
+ {Py_tp_traverse , SHA_traverse },
599
611
{0 ,0 }
600
612
};
601
613
602
614
static PyType_Spec sha512_sha384_type_spec = {
603
615
.name = "_sha512.sha384" ,
604
616
.basicsize = sizeof (SHAobject ),
605
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
617
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
618
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
606
619
.slots = sha512_sha384_type_slots
607
620
};
608
621
@@ -611,6 +624,7 @@ static PyType_Slot sha512_sha512_type_slots[] = {
611
624
{Py_tp_methods , SHA_methods },
612
625
{Py_tp_members , SHA_members },
613
626
{Py_tp_getset , SHA_getseters },
627
+ {Py_tp_traverse , SHA_traverse },
614
628
{0 ,0 }
615
629
};
616
630
@@ -619,7 +633,8 @@ static PyType_Slot sha512_sha512_type_slots[] = {
619
633
static PyType_Spec sha512_sha512_type_spec = {
620
634
.name = "_sha512.sha512" ,
621
635
.basicsize = sizeof (SHAobject ),
622
- .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE ,
636
+ .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
637
+ Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC ),
623
638
.slots = sha512_sha512_type_slots
624
639
};
625
640
0 commit comments