Author: j16sdiz
Date: 2008-04-14 00:08:48 +0000 (Mon, 14 Apr 2008)
New Revision: 19281
Modified:
trunk/freenet/src/freenet/node/LocationManager.java
Log:
move removal out, save a clone
Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2008-04-14 00:00:49 UTC
(rev 19280)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2008-04-14 00:08:48 UTC
(rev 19281)
@@ -1221,25 +1221,28 @@
public void lostOrRestartedNode(PeerNode pn) {
Vector v = new Vector();
synchronized(recentlyForwardedIDs) {
- Set keySet = new HashSet(recentlyForwardedIDs.keySet()); //
clone
-
- Iterator it = keySet.iterator();
+ Set entrySet = recentlyForwardedIDs.entrySet();
+ Iterator it = entrySet.iterator();
while (it.hasNext()) {
- Long l = (Long) it.next();
+ Map.Entry entry = (Map.Entry) it.next();
+ Long l = (Long) entry.getKey();
- RecentlyForwardedItem item =
(RecentlyForwardedItem) recentlyForwardedIDs.get(l);
- // make sure the item still exist
+ RecentlyForwardedItem item =
(RecentlyForwardedItem) entry.getValue();
+
if(item == null) {
- // FIXME removeRecentlyForwardedItem may have removed
this?
Logger.error(this, "Key is "+l+" but no value on
recentlyForwardedIDs - shouldn't be possible");
continue;
}
if(item.routedTo != pn) continue;
if(item.successfullyForwarded) {
- removeRecentlyForwardedItem(item);
v.add(item);
}
}
+
+ // remove them
+ Iterator it2 = v.iterator();
+ while (it2.hasNext())
+
removeRecentlyForwardedItem((RecentlyForwardedItem) it2.next());
}
int dumped=v.size();
if (dumped!=0 && logMINOR)