[Python-checkins] python/dist/src/Lib weakref.py,1.19,1.20
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Sat, 24 May 2003 18:45:13 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv14651/Lib
Modified Files:
weakref.py
Log Message:
SF 742860: WeakKeyDictionary __delitem__ uses iterkeys
Someone review this, please! Final releases are getting close, Fred
(the weakref guy) won't be around until Tuesday, and the pre-patch
code can indeed raise spurious RuntimeErrors in the presence of
threads or mutating comparison functions.
See the bug report for my confusions: I can't see any reason for why
__delitem__ iterated over the keys. The new one-liner implementation
is much faster, can't raise RuntimeError, and should be better-behaved
in all respects wrt threads.
New tests test_weak_keyed_bad_delitem and
test_weak_keyed_cascading_deletes fail before this patch.
Bugfix candidate for 2.2.3 too, if someone else agrees with this patch.
Index: weakref.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/weakref.py,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** weakref.py 9 Mar 2003 07:05:13 -0000 1.19
--- weakref.py 25 May 2003 01:45:11 -0000 1.20
***************
*** 165,173 ****
def __delitem__(self, key):
! for ref in self.data.iterkeys():
! o = ref()
! if o == key:
! del self.data[ref]
! return
def __getitem__(self, key):
--- 165,169 ----
def __delitem__(self, key):
! del self.data[ref(key)]
def __getitem__(self, key):