[Python-checkins] python/dist/src/Lib weakref.py,1.15.8.1,1.15.8.2
bwarsaw@users.sourceforge.net
bwarsaw@users.sourceforge.net
Wed, 28 May 2003 16:03:32 -0700
Update of /cvsroot/python/python/dist/src/Lib
In directory sc8-pr-cvs1:/tmp/cvs-serv30946/Lib
Modified Files:
Tag: release22-maint
weakref.py
Log Message:
The backport gets Fred's seal of approval:
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.
Backported the tests and the patch.
Index: weakref.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/weakref.py,v
retrieving revision 1.15.8.1
retrieving revision 1.15.8.2
diff -C2 -d -r1.15.8.1 -r1.15.8.2
*** weakref.py 23 Aug 2002 16:29:01 -0000 1.15.8.1
--- weakref.py 28 May 2003 23:03:29 -0000 1.15.8.2
***************
*** 153,161 ****
def __delitem__(self, key):
! for ref in self.data.iterkeys():
! o = ref()
! if o == key:
! del self.data[ref]
! return
def __getitem__(self, key):
--- 153,157 ----
def __delitem__(self, key):
! del self.data[ref(key)]
def __getitem__(self, key):