[Python-checkins] GH-92955: fix memory leak in code object lines and positions iterators (gh-92956)
corona10
webhook-mailer at python.org
Thu May 19 09:55:51 EDT 2022
https://github.com/python/cpython/commit/c5f5f978ca6b8b62effcbc4aa61932b76718da78
commit: c5f5f978ca6b8b62effcbc4aa61932b76718da78
branch: main
author: Kumar Aditya <59607654+kumaraditya303 at users.noreply.github.com>
committer: corona10 <donghee.na92 at gmail.com>
date: 2022-05-19T22:55:22+09:00
summary:
GH-92955: fix memory leak in code object lines and positions iterators (gh-92956)
files:
A Misc/NEWS.d/next/Core and Builtins/2022-05-19-13-25-50.gh-issue-92955.kmNV33.rst
M Objects/codeobject.c
M Objects/object.c
diff --git a/Misc/NEWS.d/next/Core and Builtins/2022-05-19-13-25-50.gh-issue-92955.kmNV33.rst b/Misc/NEWS.d/next/Core and Builtins/2022-05-19-13-25-50.gh-issue-92955.kmNV33.rst
new file mode 100644
index 0000000000000..09f03e520c436
--- /dev/null
+++ b/Misc/NEWS.d/next/Core and Builtins/2022-05-19-13-25-50.gh-issue-92955.kmNV33.rst
@@ -0,0 +1 @@
+Fix memory leak in code object's lines and positions iterators as they were not finalized at exit. Patch by Kumar Aditya.
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index c2b29be1fe869..68b0b1efb2e14 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -1096,7 +1096,7 @@ lineiter_next(lineiterator *li)
return result;
}
-static PyTypeObject LineIterator = {
+PyTypeObject _PyLineIterator = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"line_iterator", /* tp_name */
sizeof(lineiterator), /* tp_basicsize */
@@ -1142,7 +1142,7 @@ static PyTypeObject LineIterator = {
static lineiterator *
new_linesiterator(PyCodeObject *code)
{
- lineiterator *li = (lineiterator *)PyType_GenericAlloc(&LineIterator, 0);
+ lineiterator *li = (lineiterator *)PyType_GenericAlloc(&_PyLineIterator, 0);
if (li == NULL) {
return NULL;
}
@@ -1196,7 +1196,7 @@ positionsiter_next(positionsiterator* pi)
_source_offset_converter, &pi->pi_endcolumn);
}
-static PyTypeObject PositionsIterator = {
+PyTypeObject _PyPositionsIterator = {
PyVarObject_HEAD_INIT(&PyType_Type, 0)
"positions_iterator", /* tp_name */
sizeof(positionsiterator), /* tp_basicsize */
@@ -1242,7 +1242,7 @@ static PyTypeObject PositionsIterator = {
static PyObject*
code_positionsiterator(PyCodeObject* code, PyObject* Py_UNUSED(args))
{
- positionsiterator* pi = (positionsiterator*)PyType_GenericAlloc(&PositionsIterator, 0);
+ positionsiterator* pi = (positionsiterator*)PyType_GenericAlloc(&_PyPositionsIterator, 0);
if (pi == NULL) {
return NULL;
}
diff --git a/Objects/object.c b/Objects/object.c
index c9bb60eaed87c..95045ed03d5db 100644
--- a/Objects/object.c
+++ b/Objects/object.c
@@ -1846,6 +1846,8 @@ extern PyTypeObject PyHKEY_Type;
#endif
extern PyTypeObject _Py_GenericAliasIterType;
extern PyTypeObject _PyMemoryIter_Type;
+extern PyTypeObject _PyLineIterator;
+extern PyTypeObject _PyPositionsIterator;
static PyTypeObject* static_types[] = {
// The two most important base types: must be initialized first and
@@ -1944,12 +1946,14 @@ static PyTypeObject* static_types[] = {
&_PyHamt_CollisionNode_Type,
&_PyHamt_Type,
&_PyInterpreterID_Type,
+ &_PyLineIterator,
&_PyManagedBuffer_Type,
&_PyMemoryIter_Type,
&_PyMethodWrapper_Type,
&_PyNamespace_Type,
&_PyNone_Type,
&_PyNotImplemented_Type,
+ &_PyPositionsIterator,
&_PyUnicodeASCIIIter_Type,
&_PyUnion_Type,
&_PyWeakref_CallableProxyType,
More information about the Python-checkins
mailing list