From 76f6f0c21fc01d0370280d6bbe7e7a89d84d1ab0 Mon Sep 17 00:00:00 2001 From: Oscar Guindzberg Date: Tue, 12 Feb 2019 15:05:58 -0300 Subject: [PATCH] PeerGroup: Don't stop peer discovery if one peer discoverer throws an exception. --- .../main/java/org/bitcoinj/core/PeerGroup.java | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/bitcoinj/core/PeerGroup.java b/core/src/main/java/org/bitcoinj/core/PeerGroup.java index 45fabedb..fbc31a68 100644 --- a/core/src/main/java/org/bitcoinj/core/PeerGroup.java +++ b/core/src/main/java/org/bitcoinj/core/PeerGroup.java @@ -460,11 +460,7 @@ public class PeerGroup implements TransactionBroadcaster { // Don't hold the lock across discovery as this process can be very slow. boolean discoverySuccess = false; if (doDiscovery) { - try { - discoverySuccess = discoverPeers() > 0; - } catch (PeerDiscoveryException e) { - log.error("Peer discovery failure", e); - } + discoverySuccess = discoverPeers() > 0; } long retryTime; @@ -922,7 +918,7 @@ public class PeerGroup implements TransactionBroadcaster { } /** Returns number of discovered peers. */ - protected int discoverPeers() throws PeerDiscoveryException { + protected int discoverPeers() { // Don't hold the lock whilst doing peer discovery: it can take a long time and cause high API latency. checkState(!lock.isHeldByCurrentThread()); int maxPeersToDiscoverCount = this.vMaxPeersToDiscoverCount; @@ -931,7 +927,12 @@ public class PeerGroup implements TransactionBroadcaster { final List addressList = Lists.newLinkedList(); for (PeerDiscovery peerDiscovery : peerDiscoverers /* COW */) { InetSocketAddress[] addresses; - addresses = peerDiscovery.getPeers(requiredServices, peerDiscoveryTimeoutMillis, TimeUnit.MILLISECONDS); + try { + addresses = peerDiscovery.getPeers(requiredServices, peerDiscoveryTimeoutMillis, TimeUnit.MILLISECONDS); + } catch (PeerDiscoveryException e) { + log.warn(e.getMessage()); + continue; + } for (InetSocketAddress address : addresses) addressList.add(new PeerAddress(params, address)); if (addressList.size() >= maxPeersToDiscoverCount) break; }