aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJames O'Beirne <james.obeirne@gmail.com>2019-12-12 10:28:14 -0500
committerJames O'Beirne <james.obeirne@pm.me>2020-03-17 14:03:40 -0400
commit5b690f0aae21e7d46cbefe3f5be645842ac4ae3b (patch)
treef400ff724c4d23acaff44dd9820854e00cbdafdb /src
parent89cdf4d5692d396b8c7177b3918aa9dab07f9624 (diff)
downloadbitcoin-5b690f0aae21e7d46cbefe3f5be645842ac4ae3b.tar.xz
refactor: move RewindBlockIndex to CChainState
This is in preparation for multiple chainstate initialization in init.
Diffstat (limited to 'src')
-rw-r--r--src/init.cpp2
-rw-r--r--src/validation.cpp27
-rw-r--r--src/validation.h3
3 files changed, 9 insertions, 23 deletions
diff --git a/src/init.cpp b/src/init.cpp
index 97640b0658..765c61b3db 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1614,7 +1614,7 @@ bool AppInitMain(NodeContext& node)
// It both disconnects blocks based on ::ChainActive(), and drops block data in
// BlockIndex() based on lack of available witness data.
uiInterface.InitMessage(_("Rewinding blocks...").translated);
- if (!RewindBlockIndex(chainparams)) {
+ if (!::ChainstateActive().RewindBlockIndex(chainparams)) {
strLoadError = _("Unable to rewind the database to a pre-fork state. You will need to redownload the blockchain").translated;
break;
}
diff --git a/src/validation.cpp b/src/validation.cpp
index a6b1344792..9d4cdf6eb9 100644
--- a/src/validation.cpp
+++ b/src/validation.cpp
@@ -4538,26 +4538,15 @@ bool CChainState::RewindBlockIndex(const CChainParams& params)
PruneBlockIndexCandidates();
CheckBlockIndex(params.GetConsensus());
- }
- }
-
- return true;
-}
-
-bool RewindBlockIndex(const CChainParams& params) {
- if (!::ChainstateActive().RewindBlockIndex(params)) {
- return false;
- }
- LOCK(cs_main);
- if (::ChainActive().Tip() != nullptr) {
- // FlushStateToDisk can possibly read ::ChainActive(). Be conservative
- // and skip it here, we're about to -reindex-chainstate anyway, so
- // it'll get called a bunch real soon.
- BlockValidationState state;
- if (!::ChainstateActive().FlushStateToDisk(params, state, FlushStateMode::ALWAYS)) {
- LogPrintf("RewindBlockIndex: unable to flush state to disk (%s)\n", state.ToString());
- return false;
+ // FlushStateToDisk can possibly read ::ChainActive(). Be conservative
+ // and skip it here, we're about to -reindex-chainstate anyway, so
+ // it'll get called a bunch real soon.
+ BlockValidationState state;
+ if (!FlushStateToDisk(params, state, FlushStateMode::ALWAYS)) {
+ LogPrintf("RewindBlockIndex: unable to flush state to disk (%s)\n", state.ToString());
+ return false;
+ }
}
}
diff --git a/src/validation.h b/src/validation.h
index 35e4380bc0..3b160ac799 100644
--- a/src/validation.h
+++ b/src/validation.h
@@ -380,9 +380,6 @@ bool TestBlockValidity(BlockValidationState& state, const CChainParams& chainpar
* Note that transaction witness validation rules are always enforced when P2SH is enforced. */
bool IsWitnessEnabled(const CBlockIndex* pindexPrev, const Consensus::Params& params);
-/** When there are blocks in the active chain with missing data, rewind the chainstate and remove them from the block index */
-bool RewindBlockIndex(const CChainParams& params) LOCKS_EXCLUDED(cs_main);
-
/** Compute at which vout of the block's coinbase transaction the witness commitment occurs, or -1 if not found */
int GetWitnessCommitmentIndex(const CBlock& block);