diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 8ffde7363b9fbcf158d3009e00fbad4be62ec1fa..f882967592fd7a65fadbb148159a4170f94a5008 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -377,7 +377,10 @@ class PeerCoordinator implements PeerListener public boolean needOutboundPeers() { //return wantedBytes != 0 && needPeers(); // minus one to make it a little easier for new peers to get in on large swarms - return wantedBytes != 0 && !halted && peers.size() < getMaxConnections() - 1; + return wantedBytes != 0 && + !halted && + peers.size() < getMaxConnections() - 1 && + (storage == null || !storage.isChecking()); } /** @@ -945,6 +948,8 @@ class PeerCoordinator implements PeerListener { if (metainfo == null || storage == null) return true; + if (storage.isChecking()) + return true; int piece = pp.getPiece(); if (halted) { _log.info("Got while-halted piece " + piece + "/" + metainfo.getPieces() +" from " + peer + " for " + metainfo.getName()); @@ -968,6 +973,7 @@ class PeerCoordinator implements PeerListener try { + // this takes forever if complete, as it rechecks if (storage.putPiece(pp)) { if (_log.shouldLog(Log.INFO)) @@ -1173,6 +1179,8 @@ class PeerCoordinator implements PeerListener public PartialPiece getPartialPiece(Peer peer, BitField havePieces) { if (metainfo == null) return null; + if (storage != null && storage.isChecking()) + return null; synchronized(wantedPieces) { // sorts by remaining bytes, least first Collections.sort(partialPieces); diff --git a/apps/i2psnark/java/src/org/klomp/snark/Storage.java b/apps/i2psnark/java/src/org/klomp/snark/Storage.java index 21e006f5e46b3662c1669ae089479cbbce4601d2..90f6f4b555425f94f2d7649c213dcaebdcef202e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Storage.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Storage.java @@ -982,6 +982,8 @@ public class Storage /** * Put the piece in the Storage if it is correct. + * Warning - takes a LONG time if complete as it does the recheck here. + * TODO thread the recheck? * * @return true if the piece was correct (sha metainfo hash * matches), otherwise false. diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index 7283b14be1d5e1da6ee078a02d5a6fd92c65ae6e..d926ee2d439cad821ea3c7088183fabf19e133d0 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -1153,7 +1153,7 @@ public class I2PSnarkServlet extends DefaultServlet { out.write("</a>"); out.write("<td align=\"right\" class=\"snarkTorrentETA " + rowClass + "\">"); - if(isRunning && remainingSeconds > 0) + if(isRunning && remainingSeconds > 0 && !snark.isChecking()) out.write(DataHelper.formatDuration2(Math.max(remainingSeconds, 10) * 1000)); // (eta 6h) out.write("</td>\n\t"); out.write("<td align=\"right\" class=\"snarkTorrentDownloaded " + rowClass + "\">");