[Python-checkins] python/nondist/sandbox/itertools itertools.c,1.17,1.18 test_itertools.py,1.11,1.12
rhettinger@users.sourceforge.net
rhettinger@users.sourceforge.net
Fri, 31 Jan 2003 00:53:17 -0800
Update of /cvsroot/python/python/nondist/sandbox/itertools
In directory sc8-pr-cvs1:/tmp/cvs-serv23128
Modified Files:
itertools.c test_itertools.py
Log Message:
Fix refcount leak in imap().
Index: itertools.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/itertools/itertools.c,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** itertools.c 31 Jan 2003 07:20:49 -0000 1.17
--- itertools.c 31 Jan 2003 08:53:14 -0000 1.18
***************
*** 661,664 ****
--- 661,666 ----
}
PyTuple_SET_ITEM(iters, i-1, it);
+ Py_INCREF(Py_None);
+ PyTuple_SET_ITEM(argtuple, i-1, Py_None);
}
***************
*** 724,738 ****
if (argtuple == NULL)
return NULL;
- }
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL)
! return NULL;
! PyTuple_SET_ITEM(argtuple, i, val);
! }
! if (lz->func == Py_None)
return argtuple;
! return PyObject_Call(lz->func, argtuple, NULL);
}
--- 726,749 ----
if (argtuple == NULL)
return NULL;
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL) {
! Py_DECREF(argtuple);
! return NULL;
! }
! PyTuple_SET_ITEM(argtuple, i, val);
! }
return argtuple;
! } else {
! for (i=0 ; i<numargs ; i++) {
! val = PyIter_Next(PyTuple_GET_ITEM(lz->iters, i));
! if (val == NULL)
! return NULL;
! Py_DECREF(PyTuple_GET_ITEM(argtuple, i));
! PyTuple_SET_ITEM(argtuple, i, val);
! }
! return PyObject_Call(lz->func, argtuple, NULL);
! }
}
Index: test_itertools.py
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/itertools/test_itertools.py,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** test_itertools.py 29 Jan 2003 19:08:08 -0000 1.11
--- test_itertools.py 31 Jan 2003 08:53:15 -0000 1.12
***************
*** 145,148 ****
--- 145,157 ----
test_support.run_doctest(test_itertools, verbose)
+ # verify reference counting
+ import sys
+ if verbose and hasattr(sys, "gettotalrefcount"):
+ counts = []
+ for i in xrange(5):
+ test_support.run_suite(suite)
+ counts.append(sys.gettotalrefcount())
+ print counts
+
if __name__ == "__main__":
test_main(verbose=True)