@ -1400,9 +1400,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1400,9 +1400,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
delete pcoinscatcher ;
delete pblocktree ;
pblocktree = new CBlockTreeDB ( nBlockTreeDBCache , false , fReindex ) ;
pblocktree = new CBlockTreeDB ( nBlockTreeDBCache , false , fReset ) ;
if ( fReindex ) {
if ( fReset ) {
pblocktree - > WriteReindexing ( true ) ;
//If we're reindexing in prune mode, wipe away unusable block files and all undo data files
if ( fPruneMode )
@ -1414,6 +1414,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1414,6 +1414,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
// LoadBlockIndex will load fTxIndex from the db, or set it if
// we're reindexing. It will also load fHavePruned if we've
// ever removed a block file from disk.
// Note that it also sets fReindex based on the disk flag!
// From here on out fReindex and fReset mean something different!
if ( ! LoadBlockIndex ( chainparams ) ) {
strLoadError = _ ( " Error loading block database " ) ;
break ;
@ -1438,8 +1440,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1438,8 +1440,9 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
}
// At this point blocktree args are consistent with what's on disk.
// If we're not mid-reindex (based on disk + args), add a genesis block on disk.
// This is called again in ThreadImport in the reindex completes.
// If we're not mid-reindex (based on disk + args), add a genesis block on disk
// (otherwise we use the one already on disk).
// This is called again in ThreadImport after the reindex completes.
if ( ! fReindex & & ! LoadGenesisBlock ( chainparams ) ) {
strLoadError = _ ( " Error initializing block database " ) ;
break ;
@ -1448,7 +1451,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1448,7 +1451,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
// At this point we're either in reindex or we've loaded a useful
// block tree into mapBlockIndex!
pcoinsdbview = new CCoinsViewDB ( nCoinDBCache , false , fReindex | | fReindexChainState ) ;
pcoinsdbview = new CCoinsViewDB ( nCoinDBCache , false , fReset | | fReindexChainState ) ;
pcoinscatcher = new CCoinsViewErrorCatcher ( pcoinsdbview ) ;
// If necessary, upgrade from older database format.
@ -1467,7 +1470,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1467,7 +1470,8 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
// The on-disk coinsdb is now in a good state, create the cache
pcoinsTip = new CCoinsViewCache ( pcoinscatcher ) ;
if ( ! fReindex & & ! fReindexChainState ) {
bool is_coinsview_empty = fReset | | fReindexChainState | | pcoinsTip - > GetBestBlock ( ) . IsNull ( ) ;
if ( ! is_coinsview_empty ) {
// LoadChainTip sets chainActive based on pcoinsTip's best block
if ( ! LoadChainTip ( chainparams ) ) {
strLoadError = _ ( " Error initializing block database " ) ;
@ -1476,7 +1480,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1476,7 +1480,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
assert ( chainActive . Tip ( ) ! = NULL ) ;
}
if ( ! fReindex ) {
if ( ! fReset ) {
// Note that RewindBlockIndex MUST run even if we're about to -reindex-chainstate.
// It both disconnects blocks based on chainActive, and drops block data in
// mapBlockIndex based on lack of available witness data.
@ -1487,7 +1491,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
@@ -1487,7 +1491,7 @@ bool AppInitMain(boost::thread_group& threadGroup, CScheduler& scheduler)
}
}
if ( ! fReindex & & ! fReindexChainState ) {
if ( ! is_coinsview_empty ) {
uiInterface . InitMessage ( _ ( " Verifying blocks... " ) ) ;
if ( fHavePruned & & GetArg ( " -checkblocks " , DEFAULT_CHECKBLOCKS ) > MIN_BLOCKS_TO_KEEP ) {
LogPrintf ( " Prune: pruned datadir may not have more than %d blocks; only checking available blocks " ,