]> granicus.if.org Git - python/commitdiff
Improve the reverse list iterator to free memory as soon as the iterator
authorRaymond Hettinger <python@rcn.com>
Sat, 8 Nov 2003 11:58:44 +0000 (11:58 +0000)
committerRaymond Hettinger <python@rcn.com>
Sat, 8 Nov 2003 11:58:44 +0000 (11:58 +0000)
is exhausted.

Objects/listobject.c

index 7198e3481afc7e5ae3da2537a50d0badd80b7979..3782c3baacfde52834f715a9279bb499e2a0e877 100644 (file)
@@ -2771,7 +2771,7 @@ PyTypeObject PyListIter_Type = {
 typedef struct {
        PyObject_HEAD
        long it_index;
-       PyListObject *it_seq;
+       PyListObject *it_seq; /* Set to NULL when iterator is exhausted */
 } listreviterobject;
 
 PyTypeObject PyListRevIter_Type;
@@ -2819,6 +2819,9 @@ listreviter_next(listreviterobject *it)
                item = PyList_GET_ITEM(it->it_seq, it->it_index);
                it->it_index--;
                Py_INCREF(item);
+       } else if (it->it_seq != NULL) {
+               Py_DECREF(it->it_seq);
+               it->it_seq = NULL;
        }
        return item;
 }