defer removing items from heights so iteration can be done directly on the dict
authorForrest Voight <forrest@forre.st>
Wed, 10 Aug 2011 05:00:28 +0000 (01:00 -0400)
committerForrest Voight <forrest@forre.st>
Wed, 10 Aug 2011 05:00:28 +0000 (01:00 -0400)
p2pool/bitcoin/data.py

index 183b912..f48d2eb 100644 (file)
@@ -573,6 +573,7 @@ class Tracker(object):
         else:
             raise NotImplementedError()
         
+        to_remove = set()
         for share_hash2 in self.heights:
             height_to, other_share_hash, work_inc = self.heights[share_hash2]
             if other_share_hash != share.previous_hash:
@@ -584,7 +585,9 @@ class Tracker(object):
                 work_inc -= target_to_average_attempts(share.target)
                 self.heights[share_hash2] = height_to, other_share_hash, work_inc
             else:
-                del self.heights[share_hash2]
+                to_remove.add(share_hash2)
+        for share_hash2 in to_remove:
+            del self.heights[share_hash2]
         if share.hash in self.heights:
             del self.heights[share.hash]