From e14e7a228c69efd5a89b1267b390628121e68db4 Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Wed, 27 Feb 2013 13:45:50 +0100 Subject: [PATCH] Fix bug that could cause huge slowdowns during initial header sync: peers were not checking if they were still download peers after receiving header messages. --- core/src/main/java/com/google/bitcoin/core/Peer.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/com/google/bitcoin/core/Peer.java b/core/src/main/java/com/google/bitcoin/core/Peer.java index 8962682b6..8eb93e68b 100644 --- a/core/src/main/java/com/google/bitcoin/core/Peer.java +++ b/core/src/main/java/com/google/bitcoin/core/Peer.java @@ -364,6 +364,11 @@ public class Peer { for (int i = 0; i < m.getBlockHeaders().size(); i++) { Block header = m.getBlockHeaders().get(i); if (header.getTimeSeconds() < fastCatchupTimeSecs) { + if (!downloadData.get()) { + // Not download peer anymore, some other peer probably became better. + log.info("Lost download peer status, throwing away downloaded headers."); + return; + } if (blockChain.add(header)) { // The block was successfully linked into the chain. Notify the user of our progress. invokeOnBlocksDownloaded(header);