mirror of https://github.com/python/cpython
Merged revisions 55180-55183 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/p3yk ........ r55182 | neal.norwitz | 2007-05-07 23:03:06 -0700 (Mon, 07 May 2007) | 1 line Fix refleaks when using range with large values ........
This commit is contained in:
parent
617dbc4d64
commit
317e774965
|
@ -386,6 +386,7 @@ longrangeiter_len(longrangeiterobject *r, PyObject *no_args)
|
||||||
{
|
{
|
||||||
return PyNumber_Subtract(r->len, r->index);
|
return PyNumber_Subtract(r->len, r->index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *rangeiter_new(PyTypeObject *, PyObject *args, PyObject *kw);
|
static PyObject *rangeiter_new(PyTypeObject *, PyObject *args, PyObject *kw);
|
||||||
|
|
||||||
PyDoc_STRVAR(length_hint_doc,
|
PyDoc_STRVAR(length_hint_doc,
|
||||||
|
@ -510,9 +511,9 @@ static void
|
||||||
longrangeiter_dealloc(longrangeiterobject *r)
|
longrangeiter_dealloc(longrangeiterobject *r)
|
||||||
{
|
{
|
||||||
Py_XDECREF(r->index);
|
Py_XDECREF(r->index);
|
||||||
Py_DECREF(r->start);
|
Py_XDECREF(r->start);
|
||||||
Py_DECREF(r->step);
|
Py_XDECREF(r->step);
|
||||||
Py_DECREF(r->len);
|
Py_XDECREF(r->len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static PyObject *
|
static PyObject *
|
||||||
|
@ -601,7 +602,15 @@ range_iter(PyObject *seq)
|
||||||
it = PyObject_New(longrangeiterobject, &Pylongrangeiter_Type);
|
it = PyObject_New(longrangeiterobject, &Pylongrangeiter_Type);
|
||||||
if (it == NULL)
|
if (it == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
/* Do all initialization here, so we can DECREF on failure. */
|
||||||
it->start = r->start;
|
it->start = r->start;
|
||||||
|
it->step = r->step;
|
||||||
|
Py_INCREF(it->start);
|
||||||
|
Py_INCREF(it->step);
|
||||||
|
|
||||||
|
it->len = it->index = NULL;
|
||||||
|
|
||||||
/* Calculate length: (r->stop - r->start) / r->step */
|
/* Calculate length: (r->stop - r->start) / r->step */
|
||||||
tmp = PyNumber_Subtract(r->stop, r->start);
|
tmp = PyNumber_Subtract(r->stop, r->start);
|
||||||
if (!tmp)
|
if (!tmp)
|
||||||
|
@ -611,18 +620,14 @@ range_iter(PyObject *seq)
|
||||||
if (!len)
|
if (!len)
|
||||||
goto create_failure;
|
goto create_failure;
|
||||||
it->len = len;
|
it->len = len;
|
||||||
it->step = r->step;
|
|
||||||
it->index = PyLong_FromLong(0);
|
it->index = PyLong_FromLong(0);
|
||||||
if (!it->index)
|
if (!it->index)
|
||||||
goto create_failure;
|
goto create_failure;
|
||||||
|
|
||||||
Py_INCREF(it->start);
|
|
||||||
Py_INCREF(it->step);
|
|
||||||
Py_INCREF(it->len);
|
|
||||||
return (PyObject *)it;
|
return (PyObject *)it;
|
||||||
|
|
||||||
create_failure:
|
create_failure:
|
||||||
PyObject_Del(it);
|
Py_DECREF(it);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue