]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-91632: Fix generic_alias_iterator to be finalized at exit. (GH-91727)
authorDong-hee Na <donghee.na@python.org>
Wed, 20 Apr 2022 14:10:41 +0000 (23:10 +0900)
committerGitHub <noreply@github.com>
Wed, 20 Apr 2022 14:10:41 +0000 (23:10 +0900)
Misc/NEWS.d/next/Core and Builtins/2022-04-20-14-43-37.gh-issue-91632.cvUhsZ.rst [new file with mode: 0644]
Objects/genericaliasobject.c
Objects/object.c

diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-04-20-14-43-37.gh-issue-91632.cvUhsZ.rst b/Misc/NEWS.d/next/Core and Builtins/2022-04-20-14-43-37.gh-issue-91632.cvUhsZ.rst
new file mode 100644 (file)
index 0000000..e783782
--- /dev/null
@@ -0,0 +1 @@
+Fix a minor memory leak at exit: release the memory of the :class:`generic_alias_iterator` type. Patch by Dong-hee Na.
index dc585de4729fc922628b4ab1311f2df7f840f7da..7059c4018303e056d4613227b65b2daf8d7673f9 100644 (file)
@@ -683,7 +683,9 @@ ga_iter_clear(PyObject *self) {
     return 0;
 }
 
-static PyTypeObject Py_GenericAliasIterType = {
+// gh-91632: _Py_GenericAliasIterType is exported  to be cleared
+// in _PyTypes_FiniTypes.
+PyTypeObject _Py_GenericAliasIterType = {
     PyVarObject_HEAD_INIT(&PyType_Type, 0)
     .tp_name = "generic_alias_iterator",
     .tp_basicsize = sizeof(gaiterobject),
@@ -697,7 +699,7 @@ static PyTypeObject Py_GenericAliasIterType = {
 
 static PyObject *
 ga_iter(PyObject *self) {
-    gaiterobject *gi = PyObject_GC_New(gaiterobject, &Py_GenericAliasIterType);
+    gaiterobject *gi = PyObject_GC_New(gaiterobject, &_Py_GenericAliasIterType);
     if (gi == NULL) {
         return NULL;
     }
index 8adb5065c2af42dfb2766800d868920c9e15c84c..29880f6003bb1d4c8e03d7ff253287d9d90f34dd 100644 (file)
@@ -1834,6 +1834,7 @@ _PyTypes_InitState(PyInterpreterState *interp)
 #ifdef MS_WINDOWS
 extern PyTypeObject PyHKEY_Type;
 #endif
+extern PyTypeObject _Py_GenericAliasIterType;
 
 static PyTypeObject* static_types[] = {
     // The two most important base types: must be initialized first and
@@ -1923,6 +1924,7 @@ static PyTypeObject* static_types[] = {
     &_PyAsyncGenWrappedValue_Type,
     &_PyContextTokenMissing_Type,
     &_PyCoroWrapper_Type,
+    &_Py_GenericAliasIterType,
     &_PyHamtItems_Type,
     &_PyHamtKeys_Type,
     &_PyHamtValues_Type,