validation: Don't loop over all chainstates in LoadExternalBlock

This simplifies the code. The only reason to call ActivateBestChain()
here is to allow the main init thread to finish startup in a case of
-reindex. In this situation no second chainstate can exist anyway
because -reindex would have deleted any snapshot chainstate earlier.

This could change behavior slightly if -loadblocks was used when there is a
snapshot chainstate. In this case, there is no reason to call
ActivateBestChain() for that chainstate here - it will be called in
ImportBlocks() after all blocks have been indexed.
This commit is contained in:
Martin Zumsande 2024-12-06 11:37:10 -05:00
parent 22723c809a
commit a2675897e2

View File

@ -5158,15 +5158,8 @@ void ChainstateManager::LoadExternalBlockFile(
// Activate the genesis block so normal node progress can continue
if (hash == params.GetConsensus().hashGenesisBlock) {
bool genesis_activation_failure = false;
for (auto c : GetAll()) {
BlockValidationState state;
if (!c->ActivateBestChain(state, nullptr)) {
genesis_activation_failure = true;
break;
}
}
if (genesis_activation_failure) {
BlockValidationState state;
if (!ActiveChainstate().ActivateBestChain(state, nullptr)) {
break;
}
}