mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
refactor: Make FindNextBlocks friendlier
No behavior change.
This commit is contained in:
parent
5b8c5970bd
commit
73127722a2
1 changed files with 27 additions and 16 deletions
|
@ -1473,30 +1473,41 @@ void PeerManagerImpl::FindNextBlocks(std::vector<const CBlockIndex*>& vBlocks, c
|
|||
// We consider the chain that this peer is on invalid.
|
||||
return;
|
||||
}
|
||||
|
||||
if (!CanServeWitnesses(peer) && DeploymentActiveAt(*pindex, m_chainman, Consensus::DEPLOYMENT_SEGWIT)) {
|
||||
// We wouldn't download this block or its descendants from this peer.
|
||||
return;
|
||||
}
|
||||
|
||||
if (pindex->nStatus & BLOCK_HAVE_DATA || (activeChain && activeChain->Contains(pindex))) {
|
||||
if (activeChain && pindex->HaveNumChainTxs())
|
||||
if (activeChain && pindex->HaveNumChainTxs()) {
|
||||
state->pindexLastCommonBlock = pindex;
|
||||
} else if (!IsBlockRequested(pindex->GetBlockHash())) {
|
||||
// The block is not already downloaded, and not yet in flight.
|
||||
if (pindex->nHeight > nWindowEnd) {
|
||||
// We reached the end of the window.
|
||||
if (vBlocks.size() == 0 && waitingfor != peer.m_id) {
|
||||
// We aren't able to fetch anything, but we would be if the download window was one larger.
|
||||
if (nodeStaller) *nodeStaller = waitingfor;
|
||||
}
|
||||
return;
|
||||
}
|
||||
vBlocks.push_back(pindex);
|
||||
if (vBlocks.size() == count) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Is block in-flight?
|
||||
if (IsBlockRequested(pindex->GetBlockHash())) {
|
||||
if (waitingfor == -1) {
|
||||
// This is the first already-in-flight block.
|
||||
waitingfor = mapBlocksInFlight.lower_bound(pindex->GetBlockHash())->second.first;
|
||||
}
|
||||
} else if (waitingfor == -1) {
|
||||
// This is the first already-in-flight block.
|
||||
waitingfor = mapBlocksInFlight.lower_bound(pindex->GetBlockHash())->second.first;
|
||||
continue;
|
||||
}
|
||||
|
||||
// The block is not already downloaded, and not yet in flight.
|
||||
if (pindex->nHeight > nWindowEnd) {
|
||||
// We reached the end of the window.
|
||||
if (vBlocks.size() == 0 && waitingfor != peer.m_id) {
|
||||
// We aren't able to fetch anything, but we would be if the download window was one larger.
|
||||
if (nodeStaller) *nodeStaller = waitingfor;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
vBlocks.push_back(pindex);
|
||||
if (vBlocks.size() == count) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue