[Python-checkins] python/dist/src/Modules itertoolsmodule.c, 1.18, 1.18.6.1

rhettinger at users.sourceforge.net rhettinger at users.sourceforge.net
Fri Aug 29 17:13:18 EDT 2003


Update of /cvsroot/python/python/dist/src/Modules
In directory sc8-pr-cvs1:/tmp/cvs-serv796/Modules

Modified Files:
      Tag: release23-maint
	itertoolsmodule.c 
Log Message:
SF bug #793826:  using itertools.izip to mutate tuples

Avoid Armin Rigo's dastardly exercise in re-entrancy.



Index: itertoolsmodule.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Modules/itertoolsmodule.c,v
retrieving revision 1.18
retrieving revision 1.18.6.1
diff -C2 -d -r1.18 -r1.18.6.1
*** itertoolsmodule.c	14 Jul 2003 07:07:12 -0000	1.18
--- itertoolsmodule.c	29 Aug 2003 23:13:16 -0000	1.18.6.1
***************
*** 1600,1613 ****
  
  	if (result->ob_refcnt == 1) {
  		for (i=0 ; i < tuplesize ; i++) {
  			it = PyTuple_GET_ITEM(lz->ittuple, i);
  			assert(PyIter_Check(it));
  			item = (*it->ob_type->tp_iternext)(it);
! 			if (item == NULL)
  				return NULL;
  			Py_DECREF(PyTuple_GET_ITEM(result, i));
  			PyTuple_SET_ITEM(result, i, item);
  		}
- 		Py_INCREF(result);
  	} else {
  		result = PyTuple_New(tuplesize);
--- 1600,1615 ----
  
  	if (result->ob_refcnt == 1) {
+ 		Py_INCREF(result);
  		for (i=0 ; i < tuplesize ; i++) {
  			it = PyTuple_GET_ITEM(lz->ittuple, i);
  			assert(PyIter_Check(it));
  			item = (*it->ob_type->tp_iternext)(it);
! 			if (item == NULL) {
! 				Py_DECREF(result);
  				return NULL;
+ 			}
  			Py_DECREF(PyTuple_GET_ITEM(result, i));
  			PyTuple_SET_ITEM(result, i, item);
  		}
  	} else {
  		result = PyTuple_New(tuplesize);





More information about the Python-checkins mailing list