mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									6f80594229
								
							
						
					
					
						commit
						886128f4f8
					
				
					 3 changed files with 58 additions and 5 deletions
				
			
		|  | @ -164,11 +164,7 @@ def remove(k, selfref=ref(self)): | |||
|         if dict is not None: self.update(dict) | ||||
| 
 | ||||
|     def __delitem__(self, key): | ||||
|         for ref in self.data.iterkeys(): | ||||
|             o = ref() | ||||
|             if o == key: | ||||
|                 del self.data[ref] | ||||
|                 return | ||||
|         del self.data[ref(key)] | ||||
| 
 | ||||
|     def __getitem__(self, key): | ||||
|         return self.data[ref(key)] | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Tim Peters
						Tim Peters