[Python-checkins] bpo-42972: Fully support GC for mmap heap types (GH-26373)

miss-islington webhook-mailer at python.org
Thu May 27 12:44:04 EDT 2021


https://github.com/python/cpython/commit/da8097aaf5a55c23f5b5ddbeffc2d90d06e00d93
commit: da8097aaf5a55c23f5b5ddbeffc2d90d06e00d93
branch: 3.10
author: Miss Islington (bot) <31488909+miss-islington at users.noreply.github.com>
committer: miss-islington <31488909+miss-islington at users.noreply.github.com>
date: 2021-05-27T09:43:56-07:00
summary:

bpo-42972: Fully support GC for mmap heap types (GH-26373)

(cherry picked from commit 318adeba780851c416505e48a3454cacca831419)

Co-authored-by: Erlend Egeberg Aasland <erlend.aasland at innova.no>

files:
M Modules/mmapmodule.c

diff --git a/Modules/mmapmodule.c b/Modules/mmapmodule.c
index 9a2542f824c5c..8327ba677ecce 100644
--- a/Modules/mmapmodule.c
+++ b/Modules/mmapmodule.c
@@ -126,10 +126,18 @@ get_mmap_state(PyObject *module)
     return state;
 }
 
+static int
+mmap_object_traverse(mmap_object *m_obj, visitproc visit, void *arg)
+{
+    Py_VISIT(Py_TYPE(m_obj));
+    return 0;
+}
+
 static void
 mmap_object_dealloc(mmap_object *m_obj)
 {
     PyTypeObject *tp = Py_TYPE(m_obj);
+    PyObject_GC_UnTrack(m_obj);
 
 #ifdef MS_WINDOWS
     Py_BEGIN_ALLOW_THREADS
@@ -1085,15 +1093,14 @@ To map anonymous memory, pass -1 as the fileno (both versions).");
 
 static PyType_Slot mmap_object_slots[] = {
     {Py_tp_new, new_mmap_object},
-    {Py_tp_alloc, PyType_GenericAlloc},
     {Py_tp_dealloc, mmap_object_dealloc},
-    {Py_tp_free, PyObject_Del},
     {Py_tp_repr, mmap__repr__method},
     {Py_tp_doc, (void *)mmap_doc},
     {Py_tp_methods, mmap_object_methods},
     {Py_tp_members, mmap_object_members},
     {Py_tp_getset, mmap_object_getset},
     {Py_tp_getattro, PyObject_GenericGetAttr},
+    {Py_tp_traverse, mmap_object_traverse},
 
     /* as sequence */
     {Py_sq_length, mmap_length},
@@ -1114,7 +1121,7 @@ static PyType_Slot mmap_object_slots[] = {
 static PyType_Spec mmap_object_spec = {
     .name = "mmap.mmap",
     .basicsize = sizeof(mmap_object),
-    .flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
+    .flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC),
     .slots = mmap_object_slots,
 };
 



More information about the Python-checkins mailing list