diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 9dbe74836dd391cfd4830d54447254799ddcde36..83c3329b6b796a6eb3feca590788a3562d211df3 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -511,11 +511,12 @@ public class PeerCoordinator implements PeerListener { // Unchoke some random other peer unchokePeer(); - - // Don't count disconnected peers for the rarest-first calculations - for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) { - Piece piece = (Piece)iter.next(); - piece.removePeer(peer); + synchronized(wantedPieces) { + // Don't count disconnected peers for the rarest-first calculations + for(Iterator iter = wantedPieces.iterator(); iter.hasNext(); ) { + Piece piece = (Piece)iter.next(); + piece.removePeer(peer); + } } } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/Piece.java b/apps/i2psnark/java/src/org/klomp/snark/Piece.java index c6189eb634d456d7632da6bf0c961e7e073d2565..6e3cb2344c01ad5e14270bd518bb11d18edbaae8 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Piece.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Piece.java @@ -2,6 +2,7 @@ package org.klomp.snark; import java.util.Set; import java.util.HashSet; +import java.util.Collections; public class Piece implements Comparable { @@ -11,7 +12,7 @@ public class Piece implements Comparable { public Piece(int id) { this.id = id; - this.peers = new HashSet(); + this.peers = Collections.synchronizedSet(new HashSet()); this.requested = false; }