Umm, what do you think the synchronized() is for? Why lock an object, then
clone it, then do something with the clone, and finally unlock?
On Monday 14 April 2008 00:56, j16sdiz at freenetproject.org wrote:
> 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;
>
> _______________________________________________
> cvs mailing list
> cvs at freenetproject.org
> http://emu.freenetproject.org/cgi-bin/mailman/listinfo/cvs
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
URL:
<https://emu.freenetproject.org/pipermail/devl/attachments/20080414/7c42bcdb/attachment.pgp>