diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 9074e751..4eff8c93 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -722,6 +722,7 @@ public class Controller extends Thread { hasStatusChanged = true; } } + peer.setSyncInProgress(true); if (hasStatusChanged) updateSysTray(); @@ -801,6 +802,7 @@ public class Controller extends Thread { return syncResult; } finally { isSynchronizing = false; + peer.setSyncInProgress(false); } } diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index dd7cb01f..5936fe6a 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -645,10 +645,15 @@ public class Network { } // Find peers that have reached their maximum connection age, and disconnect them - List peersToDisconnect = this.connectedPeers.stream().filter(peer -> peer.hasReachedMaxConnectionAge()).collect(Collectors.toList()); + List peersToDisconnect = this.connectedPeers.stream() + .filter(peer -> !peer.isSyncInProgress()) + .filter(peer -> peer.hasReachedMaxConnectionAge()) + .collect(Collectors.toList()); + if (peersToDisconnect != null && peersToDisconnect.size() > 0) { for (Peer peer : peersToDisconnect) { - LOGGER.debug("Forcing disconnect of peer {} because connection age ({} ms) has reached the maximum ({} ms)", peer, peer.getConnectionAge(), peer.getMaxConnectionAge()); + LOGGER.info("Forcing disconnection of peer {} because connection age ({} ms) " + + "has reached the maximum ({} ms)", peer, peer.getConnectionAge(), peer.getMaxConnectionAge()); peer.disconnect("Connection age too old"); } } diff --git a/src/main/java/org/qortal/network/Peer.java b/src/main/java/org/qortal/network/Peer.java index 66ef3ae0..1aaaf2d3 100644 --- a/src/main/java/org/qortal/network/Peer.java +++ b/src/main/java/org/qortal/network/Peer.java @@ -97,6 +97,8 @@ public class Peer { byte[] ourChallenge; + private boolean syncInProgress = false; + // Versioning public static final Pattern VERSION_PATTERN = Pattern.compile(Controller.VERSION_PREFIX + "(\\d{1,3})\\.(\\d{1,5})\\.(\\d{1,5})"); @@ -340,6 +342,14 @@ public class Peer { } } + public boolean isSyncInProgress() { + return this.syncInProgress; + } + + public void setSyncInProgress(boolean syncInProgress) { + this.syncInProgress = syncInProgress; + } + @Override public String toString() { // Easier, and nicer output, than peer.getRemoteSocketAddress()