mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 14:37:42 -03:00
validation: fix issue with an interrupted -reindex
If a reindex was interrupted while it was iterating through the block files, genesis will already be connected when the reindex resumes at the next startup. In this case, a call to ActivateBestChainState() is not only unnecessary, but it would connect multiple blocks without applying -assumevalid, which is much slower. This is because assumevalid requires us to have a header above the minimum chainwork, but that header is unknown to us if it's in a later blockfile not indexed yet.
This commit is contained in:
parent
a2675897e2
commit
c9136ca906
1 changed files with 7 additions and 1 deletions
|
@ -5157,7 +5157,13 @@ void ChainstateManager::LoadExternalBlockFile(
|
||||||
}
|
}
|
||||||
|
|
||||||
// Activate the genesis block so normal node progress can continue
|
// Activate the genesis block so normal node progress can continue
|
||||||
if (hash == params.GetConsensus().hashGenesisBlock) {
|
// During first -reindex, this will only connect Genesis since
|
||||||
|
// ActivateBestChain only connects blocks which are in the block tree db,
|
||||||
|
// which only contains blocks whose parents are in it.
|
||||||
|
// But do this only if genesis isn't activated yet, to avoid connecting many blocks
|
||||||
|
// without assumevalid in the case of a continuation of a reindex that
|
||||||
|
// was interrupted by the user.
|
||||||
|
if (hash == params.GetConsensus().hashGenesisBlock && WITH_LOCK(::cs_main, return ActiveHeight()) == -1) {
|
||||||
BlockValidationState state;
|
BlockValidationState state;
|
||||||
if (!ActiveChainstate().ActivateBestChain(state, nullptr)) {
|
if (!ActiveChainstate().ActivateBestChain(state, nullptr)) {
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue