Author: j16sdiz
Date: 2008-04-13 23:56:23 +0000 (Sun, 13 Apr 2008)
New Revision: 19279
Modified:
trunk/freenet/src/freenet/node/LocationManager.java
Log:
fix concurrent modification (give NPE in gcj)
Modified: trunk/freenet/src/freenet/node/LocationManager.java
===================================================================
--- trunk/freenet/src/freenet/node/LocationManager.java 2008-04-13 23:45:47 UTC
(rev 19278)
+++ trunk/freenet/src/freenet/node/LocationManager.java 2008-04-13 23:56:23 UTC
(rev 19279)
@@ -10,8 +10,12 @@
import java.text.DateFormat;
import java.util.Date;
import java.util.Enumeration;
+import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.LinkedList;
+import java.util.Map;
+import java.util.Set;
import java.util.Vector;
import freenet.crypt.RandomSource;
@@ -1217,10 +1221,14 @@
public void lostOrRestartedNode(PeerNode pn) {
Vector v = new Vector();
synchronized(recentlyForwardedIDs) {
- Enumeration e = recentlyForwardedIDs.keys();
- while(e.hasMoreElements()) {
- Long l = (Long)e.nextElement();
- RecentlyForwardedItem item =
(RecentlyForwardedItem)recentlyForwardedIDs.get(l);
+ Set entrySet = new HashSet(recentlyForwardedIDs.entrySet()); //
clone
+
+ Iterator it = entrySet.iterator();
+ while (it.hasNext()) {
+ Map.Entry e = (Map.Entry) it.next();
+ Long l = (Long) e.getKey();
+
+ RecentlyForwardedItem item =
(RecentlyForwardedItem) e.getValue();
if(item == null) {
Logger.error(this, "Key is "+l+" but no value on
recentlyForwardedIDs - shouldn't be possible");
continue;