From 7b4dc184f71d0184f6992df663307f3d9eeea6ac Mon Sep 17 00:00:00 2001 From: Mike Hearn Date: Sun, 9 Sep 2012 15:26:25 +0200 Subject: [PATCH] Fix a bug that could cause us to fail the transition between downloading headers and blocks. --- .../main/java/com/google/bitcoin/core/Peer.java | 3 ++- .../java/com/google/bitcoin/core/PeerTest.java | 17 ++++++++--------- 2 files changed, 10 insertions(+), 10 deletions(-) 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 a3e6ee4d..3f33ac8c 100644 --- a/core/src/main/java/com/google/bitcoin/core/Peer.java +++ b/core/src/main/java/com/google/bitcoin/core/Peer.java @@ -298,7 +298,8 @@ public class Peer { log.info("Passed the fast catchup time, discarding {} headers and requesting full blocks", m.getBlockHeaders().size() - i); downloadBlockBodies = true; - blockChainDownload(header.getHash()); + lastGetBlocksBegin = Sha256Hash.ZERO_HASH; // Prevent this request being seen as a duplicate. + blockChainDownload(Sha256Hash.ZERO_HASH); return; } } diff --git a/core/src/test/java/com/google/bitcoin/core/PeerTest.java b/core/src/test/java/com/google/bitcoin/core/PeerTest.java index 6441ceb5..ceaa72f3 100644 --- a/core/src/test/java/com/google/bitcoin/core/PeerTest.java +++ b/core/src/test/java/com/google/bitcoin/core/PeerTest.java @@ -16,8 +16,11 @@ package com.google.bitcoin.core; -import static org.easymock.EasyMock.*; -import static org.junit.Assert.*; +import com.google.bitcoin.core.Peer.PeerHandler; +import org.easymock.Capture; +import org.jboss.netty.channel.*; +import org.junit.Before; +import org.junit.Test; import java.io.IOException; import java.math.BigInteger; @@ -26,12 +29,8 @@ import java.util.List; import java.util.concurrent.Future; import static com.google.bitcoin.core.TestUtils.*; -import org.easymock.Capture; -import org.jboss.netty.channel.*; -import org.junit.Before; -import org.junit.Test; - -import com.google.bitcoin.core.Peer.PeerHandler; +import static org.easymock.EasyMock.*; +import static org.junit.Assert.*; public class PeerTest extends TestWithNetworkConnections { private Peer peer; @@ -422,7 +421,7 @@ public class PeerTest extends TestWithNetworkConnections { inbound(peer, headers); GetBlocksMessage getblocks = (GetBlocksMessage) event.getValue().getMessage(); assertEquals(expectedLocator, getblocks.getLocator()); - assertEquals(b3.getHash(), getblocks.getStopHash()); + assertEquals(Sha256Hash.ZERO_HASH, getblocks.getStopHash()); // We're supposed to get an inv here. InventoryMessage inv = new InventoryMessage(unitTestParams); inv.addItem(new InventoryItem(InventoryItem.Type.Block, b3.getHash()));