]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
* drop the unreasonable list invariant that ob_item should never come back
authorArmin Rigo <arigo@tunes.org>
Thu, 29 Jul 2004 12:40:23 +0000 (12:40 +0000)
committerArmin Rigo <arigo@tunes.org>
Thu, 29 Jul 2004 12:40:23 +0000 (12:40 +0000)
commit93677f075df9a23c036f4baeb2b9f67c784eadbc
treea96bfc6ce9b3dc2b976d24a8f2f1b2732888bf96
parentf414fc4004fde1118f15efe73f93e2d12d91d82c
* 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.
Include/listobject.h
Lib/test/test_sort.py
Objects/listobject.c