diff options
author | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2007-11-15 20:52:21 (GMT) |
---|---|---|
committer | Amaury Forgeot d'Arc <amauryfa@gmail.com> | 2007-11-15 20:52:21 (GMT) |
commit | b7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28 (patch) | |
tree | 5c38ca1612fe95bee26dce5af472585b33fd0a74 /Objects | |
parent | 519a042c7c248e3ae23cf2a3c1152f91a5bd2791 (diff) | |
download | cpython-b7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28.zip cpython-b7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28.tar.gz cpython-b7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28.tar.bz2 |
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?
Diffstat (limited to 'Objects')
-rw-r--r-- | Objects/object.c | 3 | ||||
-rw-r--r-- | Objects/rangeobject.c | 3 |
2 files changed, 2 insertions, 4 deletions
diff --git a/Objects/object.c b/Objects/object.c index fa5eb4d..df93a19 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -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'"); } diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c index e159feb..0bb3e7b 100644 --- a/Objects/rangeobject.c +++ b/Objects/rangeobject.c @@ -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 * |