[Python-checkins] python/dist/src/Include listobject.h,2.30,2.31

arigo at users.sourceforge.net arigo at users.sourceforge.net
Thu Jul 29 14:40:25 CEST 2004


Update of /cvsroot/python/python/dist/src/Include
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28350/Include

Modified Files:
	listobject.h 
Log Message:
* drop the unreasonable list invariant that ob_item should never come back
  to NULL during the lifetime of the object.

* listobject.c nevertheless did not conform to the other invariants,
  either; fixed.

* listobject.c now uses list_clear() as the obvious internal way to clear
  a list, instead of abusing list_ass_slice() for that.  It makes it easier
  to enforce the invariant about ob_item == NULL.

* listsort() sets allocated to -1 during sort; any mutation will set it
  to a value >= 0, so it is a safe way to detect mutation.  A negative
  value for allocated does not cause a problem elsewhere currently.
  test_sort.py has a new test for this fix.

* listsort() leak: if items were added to the list during the sort, AND if
  these items had a __del__ that puts still more stuff into the list,
  then this more stuff (and the PyObject** array to hold them) were
  overridden at the end of listsort() and never released.


Index: listobject.h
===================================================================
RCS file: /cvsroot/python/python/dist/src/Include/listobject.h,v
retrieving revision 2.30
retrieving revision 2.31
diff -C2 -d -r2.30 -r2.31
*** listobject.h	29 Jul 2004 04:07:14 -0000	2.30
--- listobject.h	29 Jul 2004 12:40:22 -0000	2.31
***************
*** 31,37 ****
       *     len(list) == ob_size
       *     ob_item == NULL implies ob_size == allocated == 0
!      *     If ob_item ever becomes non-NULL, it remains non-NULL for the
!      *         life of the list object.  The check for mutation in list.sort()
!      *         relies on this odd detail.
       */
      int allocated;
--- 31,35 ----
       *     len(list) == ob_size
       *     ob_item == NULL implies ob_size == allocated == 0
!      * list.sort() temporarily sets allocated to -1 to detect mutations.
       */
      int allocated;



More information about the Python-checkins mailing list