diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index e1785034cd9a9565c8621e3588f6e434970feca8..9dbe74836dd391cfd4830d54447254799ddcde36 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -511,6 +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); + } } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/Piece.java b/apps/i2psnark/java/src/org/klomp/snark/Piece.java index 817bdce83f5a567ee74f3b37b92e7856b3d87122..c6189eb634d456d7632da6bf0c961e7e073d2565 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Piece.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Piece.java @@ -31,6 +31,7 @@ public class Piece implements Comparable { public int getId() { return this.id; } public Set getPeers() { return this.peers; } public boolean addPeer(Peer peer) { return this.peers.add(peer.getPeerID()); } + public boolean removePeer(Peer peer) { return this.peers.remove(peer.getPeerID()); } public boolean isRequested() { return this.requested; } public void setRequested(boolean requested) { this.requested = requested; } }