diff --git a/core/src/main/java/org/bitcoinj/core/PeerGroup.java b/core/src/main/java/org/bitcoinj/core/PeerGroup.java index 8eef8b35..45fabedb 100644 --- a/core/src/main/java/org/bitcoinj/core/PeerGroup.java +++ b/core/src/main/java/org/bitcoinj/core/PeerGroup.java @@ -860,22 +860,26 @@ public class PeerGroup implements TransactionBroadcaster { int newMax; lock.lock(); try { - addInactive(peerAddress); - newMax = getMaxConnections() + 1; + if (addInactive(peerAddress)) { + newMax = getMaxConnections() + 1; + setMaxConnections(newMax); + } } finally { lock.unlock(); } - setMaxConnections(newMax); } - private void addInactive(PeerAddress peerAddress) { + // Adds peerAddress to backoffMap map and inactives queue. + // Returns true if it was added, false if it was already there. + private boolean addInactive(PeerAddress peerAddress) { lock.lock(); try { // Deduplicate if (backoffMap.containsKey(peerAddress)) - return; + return false; backoffMap.put(peerAddress, new ExponentialBackoff(peerBackoffParams)); inactives.offer(peerAddress); + return true; } finally { lock.unlock(); }