|
|
|
@ -2472,6 +2472,8 @@ void CChainState::PruneBlockIndexCandidates() {
|
|
|
|
|
/**
|
|
|
|
|
* Try to make some progress towards making pindexMostWork the active block.
|
|
|
|
|
* pblock is either nullptr or a pointer to a CBlock corresponding to pindexMostWork.
|
|
|
|
|
*
|
|
|
|
|
* @returns true unless a system error occurred
|
|
|
|
|
*/
|
|
|
|
|
bool CChainState::ActivateBestChainStep(CValidationState& state, const CChainParams& chainparams, CBlockIndex* pindexMostWork, const std::shared_ptr<const CBlock>& pblock, bool& fInvalidFound, ConnectTrace& connectTrace)
|
|
|
|
|
{
|
|
|
|
@ -2598,6 +2600,8 @@ static void LimitValidationInterfaceQueue() LOCKS_EXCLUDED(cs_main) {
|
|
|
|
|
* ActivateBestChain is split into steps (see ActivateBestChainStep) so that
|
|
|
|
|
* we avoid holding cs_main for an extended period of time; the length of this
|
|
|
|
|
* call may be quite long during reindexing or a substantial reorg.
|
|
|
|
|
*
|
|
|
|
|
* @returns true unless a system error occurred
|
|
|
|
|
*/
|
|
|
|
|
bool CChainState::ActivateBestChain(CValidationState &state, const CChainParams& chainparams, std::shared_ptr<const CBlock> pblock) {
|
|
|
|
|
// Note that while we're often called here from ProcessNewBlock, this is
|
|
|
|
@ -2646,8 +2650,10 @@ bool CChainState::ActivateBestChain(CValidationState &state, const CChainParams&
|
|
|
|
|
|
|
|
|
|
bool fInvalidFound = false;
|
|
|
|
|
std::shared_ptr<const CBlock> nullBlockPtr;
|
|
|
|
|
if (!ActivateBestChainStep(state, chainparams, pindexMostWork, pblock && pblock->GetHash() == pindexMostWork->GetBlockHash() ? pblock : nullBlockPtr, fInvalidFound, connectTrace))
|
|
|
|
|
if (!ActivateBestChainStep(state, chainparams, pindexMostWork, pblock && pblock->GetHash() == pindexMostWork->GetBlockHash() ? pblock : nullBlockPtr, fInvalidFound, connectTrace)) {
|
|
|
|
|
// A system error occurred
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
blocks_connected = true;
|
|
|
|
|
|
|
|
|
|
if (fInvalidFound) {
|
|
|
|
|