summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>2022-05-14 14:55:03 (GMT)
committerGitHub <noreply@github.com>2022-05-14 14:55:03 (GMT)
commitd9089c0e8b3728adba502389d193e80543741a2b (patch)
tree108f70f7d4cc7a7b618e9ad0112198873581c7ea
parent964067635602d1be5782b68a44123d59f3b92520 (diff)
downloadcpython-d9089c0e8b3728adba502389d193e80543741a2b.zip
cpython-d9089c0e8b3728adba502389d193e80543741a2b.tar.gz
cpython-d9089c0e8b3728adba502389d193e80543741a2b.tar.bz2
GH-92804: Fix memory leak in memoryview iterator (gh-92805)
(cherry picked from commit d923fdf54bc97baece879179ba4971f632b9722b) Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
-rw-r--r--Misc/NEWS.d/next/Core and Builtins/2022-05-14-13-22-11.gh-issue-92804.rAqpI2.rst1
-rw-r--r--Objects/memoryobject.c6
-rw-r--r--Objects/object.c2
3 files changed, 6 insertions, 3 deletions
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-14-13-22-11.gh-issue-92804.rAqpI2.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-14-13-22-11.gh-issue-92804.rAqpI2.rst
new file mode 100644
index 0000000..7a5fd3f
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-05-14-13-22-11.gh-issue-92804.rAqpI2.rst
@@ -0,0 +1 @@
+Fix memory leak in ``memoryview`` iterator as it was not finalized at exit. Patch by Kumar Aditya.
diff --git a/Objects/memoryobject.c b/Objects/memoryobject.c
index 45fe898..8c26916 100644
--- a/Objects/memoryobject.c
+++ b/Objects/memoryobject.c
@@ -3156,7 +3156,7 @@ static PyMethodDef memory_methods[] = {
/* Memoryview Iterator */
/**************************************************************************/
-static PyTypeObject PyMemoryIter_Type;
+PyTypeObject _PyMemoryIter_Type;
typedef struct {
PyObject_HEAD
@@ -3233,7 +3233,7 @@ memory_iter(PyObject *seq)
}
memoryiterobject *it;
- it = PyObject_GC_New(memoryiterobject, &PyMemoryIter_Type);
+ it = PyObject_GC_New(memoryiterobject, &_PyMemoryIter_Type);
if (it == NULL) {
return NULL;
}
@@ -3246,7 +3246,7 @@ memory_iter(PyObject *seq)
return (PyObject *)it;
}
-static PyTypeObject PyMemoryIter_Type = {
+PyTypeObject _PyMemoryIter_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
.tp_name = "memory_iterator",
.tp_basicsize = sizeof(memoryiterobject),
diff --git a/Objects/object.c b/Objects/object.c
index d5f21b7..303a22b 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1845,6 +1845,7 @@ _PyTypes_InitState(PyInterpreterState *interp)
extern PyTypeObject PyHKEY_Type;
#endif
extern PyTypeObject _Py_GenericAliasIterType;
+extern PyTypeObject _PyMemoryIter_Type;
static PyTypeObject* static_types[] = {
// The two most important base types: must be initialized first and
@@ -1944,6 +1945,7 @@ static PyTypeObject* static_types[] = {
&_PyHamt_Type,
&_PyInterpreterID_Type,
&_PyManagedBuffer_Type,
+ &_PyMemoryIter_Type,
&_PyMethodWrapper_Type,
&_PyNamespace_Type,
&_PyNone_Type,