mirror of https://github.com/python/cpython
Found another memory leak in longrangeiter. And redo the previous correction
without calling PyType_Ready(). Question 1: Should the interpreter register all types with PyType_Ready()? Many types seem to avoid it. Question 2: To reproduce the problem, run the following code: def f(): while True: for a in iter(range(0,1,10**20)): pass f() And watch the memory used by the process. How do we test this in a unittest?
This commit is contained in:
parent
519a042c7c
commit
b7f17e4bb4
|
@ -1509,9 +1509,6 @@ _Py_ReadyTypes(void)
|
|||
|
||||
if (PyType_Ready(&PyStdPrinter_Type) < 0)
|
||||
Py_FatalError("Can't initialize StdPrinter");
|
||||
|
||||
if (PyType_Ready(&PyRange_Type) < 0)
|
||||
Py_FatalError("Can't initialize 'range'");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -107,7 +107,7 @@ range_dealloc(rangeobject *r)
|
|||
Py_DECREF(r->start);
|
||||
Py_DECREF(r->stop);
|
||||
Py_DECREF(r->step);
|
||||
Py_Type(r)->tp_free(r);
|
||||
PyObject_Del(r);
|
||||
}
|
||||
|
||||
/* Return number of items in range (lo, hi, step), when arguments are
|
||||
|
@ -482,6 +482,7 @@ longrangeiter_dealloc(longrangeiterobject *r)
|
|||
Py_XDECREF(r->start);
|
||||
Py_XDECREF(r->step);
|
||||
Py_XDECREF(r->len);
|
||||
PyObject_Del(r);
|
||||
}
|
||||
|
||||
static PyObject *
|
||||
|
|
Loading…
Reference in New Issue