[Python-checkins] CVS: python/dist/src/Objects tupleobject.c,2.56,2.57

Guido van Rossum gvanrossum@users.sourceforge.net
Thu, 30 Aug 2001 11:31:32 -0700


Update of /cvsroot/python/python/dist/src/Objects
In directory usw-pr-cvs1:/tmp/cvs-serv1110

Modified Files:
	tupleobject.c 
Log Message:
More stuff discovered while writing the simplest of testcases:

tupledealloc(): only feed the free list when the type is really a
tuple, not a subtype.  Otherwise, use PyObject_GC_Del().

_PyTuple_Resize(): disallow using this for tuple subtypes.


Index: tupleobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/tupleobject.c,v
retrieving revision 2.56
retrieving revision 2.57
diff -C2 -d -r2.56 -r2.57
*** tupleobject.c	2001/08/30 03:11:59	2.56
--- tupleobject.c	2001/08/30 18:31:30	2.57
***************
*** 147,151 ****
  			Py_XDECREF(op->ob_item[i]);
  #if MAXSAVESIZE > 0
! 		if (len < MAXSAVESIZE && num_free_tuples[len] < MAXSAVEDTUPLES) {
  			op->ob_item[0] = (PyObject *) free_tuples[len];
  			num_free_tuples[len]++;
--- 147,154 ----
  			Py_XDECREF(op->ob_item[i]);
  #if MAXSAVESIZE > 0
! 		if (len < MAXSAVESIZE &&
! 		    num_free_tuples[len] < MAXSAVEDTUPLES &&
! 		    op->ob_type == &PyTuple_Type)
! 		{
  			op->ob_item[0] = (PyObject *) free_tuples[len];
  			num_free_tuples[len]++;
***************
*** 595,599 ****
  
  	v = (PyTupleObject *) *pv;
! 	if (v == NULL || !PyTuple_Check(v) ||
  	    (v->ob_size != 0 && v->ob_refcnt != 1)) {
  		*pv = 0;
--- 598,602 ----
  
  	v = (PyTupleObject *) *pv;
! 	if (v == NULL || v->ob_type != &PyTuple_Type ||
  	    (v->ob_size != 0 && v->ob_refcnt != 1)) {
  		*pv = 0;