summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>2007-11-15 20:52:21 +0000
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>2007-11-15 20:52:21 +0000
commitb7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28 (patch)
tree5c38ca1612fe95bee26dce5af472585b33fd0a74
parent519a042c7c248e3ae23cf2a3c1152f91a5bd2791 (diff)
downloadcpython-git-b7f17e4bb4627a0a8bd9a4fe20e9f4e26e9a4d28.tar.gz
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?
-rw-r--r--Objects/object.c3
-rw-r--r--Objects/rangeobject.c3
2 files changed, 2 insertions, 4 deletions
diff --git a/Objects/object.c b/Objects/object.c
index fa5eb4d11b..df93a192d6 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 e159febdac..0bb3e7b0ae 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 *