8000 GH-92955: fix memory leak in code object lines and positions iterator… · python/cpython@c5f5f97 · GitHub
[go: up one dir, main page]

Skip to content

Commit c5f5f97

Browse files
GH-92955: fix memory leak in code object lines and positions iterators (gh-92956)
1 parent 137fd3d commit c5f5f97

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix memory leak in code object's lines and positions iterators as they were not finalized at exit. Patch by Kumar Aditya.

Objects/codeobject.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1096,7 +1096,7 @@ lineiter_next(lineiterator *li)
10961096
return result;
10971097
}
10981098

1099-
static PyTypeObject LineIterator = {
1099+
PyTypeObject _PyLineIterator = {
11001100
PyVarObject_HEAD_INIT(&PyType_Type, 0)
11011101
"line_iterator", /* tp_name */
11021102
sizeof(lineiterator), /* tp_basicsize */
@@ -1142,7 +1142,7 @@ static PyTypeObject LineIterator = {
11421142
static lineiterator *
11431143
new_linesiterator(PyCodeObject *code)
11441144
{
1145-
lineiterator *li = (lineiterator *)PyType_GenericAlloc(&LineIterator, 0);
1145+
lineiterator *li = (lineiterator *)PyType_GenericAlloc(&_PyLineIterator, 0);
11461146
if (li == NULL) {
11471147
return NULL;
11481148
}
@@ -1196,7 +1196,7 @@ positionsiter_next(positionsiterator* pi)
11961196
_source_offset_converter, &pi->pi_endcolumn);
11971197
}
11981198

1199-
static PyTypeObject PositionsIterator = {
1199+
PyTypeObject _PyPositionsIterator = {
12001200
PyVarObject_HEAD_INIT(&PyType_Type, 0)
12011201
"positions_iterator", /* tp_name */
12021202
sizeof(positionsiterator), /* tp_basicsize */
@@ -1242,7 +1242,7 @@ static PyTypeObject PositionsIterator = {
12421242
static PyObject*
12431243
code_positionsiterator(PyCodeObject* code, PyObject* Py_UNUSED(args))
12441244
{
1245-
positionsiterator* pi = (positionsiterator*)PyType_GenericAlloc(&PositionsIterator, 0);
1245+
positionsiterator* pi = (positionsiterator*)PyType_GenericAlloc(&_PyPositionsIterator, 0);
12461246
if (pi == NULL) {
12471247
return NULL;
12481248
}

Objects/object.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1846,6 +1846,8 @@ extern PyTypeObject PyHKEY_Type;
18461846
#endif
18471847
extern PyTypeObject _Py_GenericAliasIterType;
18481848
extern PyTypeObject _PyMemoryIter_Type;
1849+
extern PyTypeObject _PyLineIterator;
1850+
extern PyTypeObject _PyPositionsIterator;
18491851

18501852
static PyTypeObject* static_types[] = {
18511853
// The two most important base types: must be initialized first and
@@ -1944,12 +1946,14 @@ static PyTypeObject* static_types[] = {
19441946
&_PyHamt_CollisionNode_Type,
19451947
&_PyHamt_Type,
19461948
&_PyInterpreterID_Type,
1949+
&_PyLineIterator,
19471950
&_PyManagedBuffer_Type,
19481951
&_PyMemoryIter_Type,
19491952
&_PyMethodWrapper_Type,
19501953
&_PyNamespace_Type,
19511954
&_PyNone_Type,
19521955
&_PyNotImplemented_Type,
1956+
&_PyPositionsIterator,
19531957
&_PyUnicodeASCIIIter_Type,
19541958
&_PyUnion_Type,
19551959
&_PyWeakref_CallableProxyType,

0 commit comments

Comments
 (0)
0