From a9b40c358fd661b46a186253cf104ccfbb1ab74e Mon Sep 17 00:00:00 2001 From: Oscar Guindzberg Date: Tue, 12 Feb 2019 15:02:20 -0300 Subject: [PATCH] PeerGroup.addAddress(): Don't increase max connections if address already exists. --- .../src/main/java/org/bitcoinj/core/PeerGroup.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) 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(); }