3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-13 02:35:52 +00:00

Avoid trying to resolve dependencies of newly solved orphan blocks when we are still downloading headers.

This commit is contained in:
Mike Hearn 2013-02-27 16:25:50 +01:00
parent a837bd2885
commit 049baad8c6

View File

@ -672,7 +672,13 @@ public class Peer {
// chain twice (or more!) on the same connection! The block chain would filter out the duplicates but
// only at a huge speed penalty. By finding the orphan root we ensure every getblocks looks the same
// no matter how many blocks are solved, and therefore that the (2) duplicate filtering can work.
//
// We only do this if we are not currently downloading headers. If we are then we don't want to kick
// off a request for lots more headers in parallel.
if (downloadBlockBodies)
blockChainDownload(blockChain.getOrphanRoot(m.getHash()).getHash());
else
log.info("Did not start chain download on solved block due to in-flight header download.");
}
} catch (VerificationException e) {
// We don't want verification failures to kill the thread.
@ -827,8 +833,9 @@ public class Peer {
// disk IO to figure out what we've got. Normally peers will not send us inv for things we already have
// so we just re-request it here, and if we get duplicates the block chain / wallet will filter them out.
for (InventoryItem item : blocks) {
if (blockChain.isOrphan(item.hash)) {
// If an orphan was re-advertised, ask for more blocks.
if (blockChain.isOrphan(item.hash) && downloadBlockBodies) {
// If an orphan was re-advertised, ask for more blocks unless we are not currently downloading
// full block data because we have a getheaders outstanding.
blockChainDownload(blockChain.getOrphanRoot(item.hash).getHash());
} else {
// Don't re-request blocks we already requested. Normally this should not happen. However there is
@ -958,8 +965,6 @@ public class Peer {
private Sha256Hash lastGetBlocksBegin, lastGetBlocksEnd;
private synchronized void blockChainDownload(Sha256Hash toHash) throws IOException {
// This may run in ANY thread.
// The block chain download process is a bit complicated. Basically, we start with one or more blocks in a
// chain that we have from a previous session. We want to catch up to the head of the chain BUT we don't know
// where that chain is up to or even if the top block we have is even still in the chain - we