[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):