8000 bpo-42972: Fully support GC for md5 heap types · python/cpython@49226dd · GitHub
[go: up one dir, main page]

Skip to content

Commit 49226dd

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

File tree

1 file changed

+14
-3
lines changed

1 file changed

+14
-3
lines changed

Modules/md5module.c

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -333,16 +333,25 @@ md5_get_state(PyObject *module)
333333
static MD5object *
334334
newMD5object(MD5State * st)
335335
{
336-
return (MD5object *)PyObject_New(MD5object, st->md5_type);
336+
MD5object *md5 = (MD5object *)PyObject_GC_New(MD5object, st->md5_type);
337+
PyObject_GC_Track(md5);
338+
return md5;
337339
}
338340

339341
/* Internal methods for a hash object */
342+
static int
343+
MD5_traverse(PyObject *ptr, visitproc visit, void *arg)
344+
{
345+
Py_VISIT(Py_TYPE(ptr));
346+
return 0;
347+
}
340348

341349
static void
342350
MD5_dealloc(PyObject *ptr)
343351
{
344352
PyTypeObject *tp = Py_TYPE(ptr);
345-
PyObject_Free(ptr);
353+
PyObject_GC_UnTrack(ptr);
354+
PyObject_GC_Del(ptr);
346355
Py_DECREF(tp);
347356
}
348357

@@ -478,13 +487,15 @@ static PyType_Slot md5_type_slots[] = {
478487
{Py_tp_dealloc, MD5_dealloc},
479488
{Py_tp_methods, MD5_methods},
480489
{Py_tp_getset, MD5_getseters},
490+
{Py_tp_traverse, MD5_traverse},
481491
{0,0}
482492
};
483493

484494
static PyType_Spec md5_type_spec = {
485495
.name = "_md5.md5",
486496
.basicsize = sizeof(MD5object),
487-
.flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION | Py_TPFLAGS_IMMUTABLETYPE,
497+
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION |
498+
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_HAVE_GC),
488499
.slots = md5_type_slots
489500
};
490501

0 commit comments

Comments
 (0)
0