Skip to content

Commit b381665

Browse files
author
Erlend E. Aasland
committed
bpo-42972: Fully support GC for sha1 heap types
1 parent b2817ab commit b381665

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

Modules/sha1module.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -310,17 +310,26 @@ sha1_get_state(PyObject *module)
310310
static SHA1object *
311311
newSHA1object(SHA1State *st)
312312
{
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;
314316
}
315317

316318

317319
/* 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+
}
318326

319327
static void
320328
SHA1_dealloc(PyObject *ptr)
321329
{
322330
PyTypeObject *tp = Py_TYPE(ptr);
323-
PyObject_Free(ptr);
331+
PyObject_GC_UnTrack(ptr);
332+
PyObject_GC_Del(ptr);
324333
Py_DECREF(tp);
325334
}
326335

@@ -456,13 +465,15 @@ static PyType_Slot sha1_type_slots[] = {
456465
{Py_tp_dealloc, SHA1_dealloc},
457466
{Py_tp_methods, SHA1_methods},
458467
{Py_tp_getset, SHA1_getseters},
468+
{Py_tp_traverse, SHA1_traverse},
459469
{0,0}
460470
};
461471

462472
static PyType_Spec sha1_type_spec = {
463473
.name = "_sha1.sha1",
464474
.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),
466477
.slots = sha1_type_slots
467478
};
468479

0 commit comments

Comments
 (0)