Merge pull request #5173
50b43fd
Be a bit more verbose during -loadblock if we already have blocks (Matt Corallo)8375e22
Fix -loadblock after shutdown during IBD (Matt Corallo)4ead850
Fix for crash during block download (Matt Corallo)
This commit is contained in:
commit
0778333b8c
10
src/main.cpp
10
src/main.cpp
@ -1760,9 +1760,9 @@ bool ConnectBlock(CBlock& block, CValidationState& state, CBlockIndex* pindex, C
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Update the on-disk chain state.
|
// Update the on-disk chain state.
|
||||||
bool static WriteChainState(CValidationState &state) {
|
bool static WriteChainState(CValidationState &state, bool forceWrite=false) {
|
||||||
static int64_t nLastWrite = 0;
|
static int64_t nLastWrite = 0;
|
||||||
if (pcoinsTip->GetCacheSize() > nCoinCacheSize || (!IsInitialBlockDownload() && GetTimeMicros() > nLastWrite + 600*1000000)) {
|
if (forceWrite || pcoinsTip->GetCacheSize() > nCoinCacheSize || (!IsInitialBlockDownload() && GetTimeMicros() > nLastWrite + 600*1000000)) {
|
||||||
// Typical CCoins structures on disk are around 100 bytes in size.
|
// Typical CCoins structures on disk are around 100 bytes in size.
|
||||||
// Pushing a new one to the database can cause it to be written
|
// Pushing a new one to the database can cause it to be written
|
||||||
// twice (once in the log, and once in the tables). This is already
|
// twice (once in the log, and once in the tables). This is already
|
||||||
@ -3022,6 +3022,8 @@ bool InitBlockIndex() {
|
|||||||
return error("LoadBlockIndex() : genesis block not accepted");
|
return error("LoadBlockIndex() : genesis block not accepted");
|
||||||
if (!ActivateBestChain(state, &block))
|
if (!ActivateBestChain(state, &block))
|
||||||
return error("LoadBlockIndex() : genesis block cannot be activated");
|
return error("LoadBlockIndex() : genesis block cannot be activated");
|
||||||
|
// Force a chainstate write so that when we VerifyDB in a moment, it doesnt check stale data
|
||||||
|
return WriteChainState(state, true);
|
||||||
} catch(std::runtime_error &e) {
|
} catch(std::runtime_error &e) {
|
||||||
return error("LoadBlockIndex() : failed to initialize block database: %s", e.what());
|
return error("LoadBlockIndex() : failed to initialize block database: %s", e.what());
|
||||||
}
|
}
|
||||||
@ -3157,12 +3159,14 @@ bool LoadExternalBlockFile(FILE* fileIn, CDiskBlockPos *dbp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// process in case the block isn't known yet
|
// process in case the block isn't known yet
|
||||||
if (mapBlockIndex.count(hash) == 0) {
|
if (mapBlockIndex.count(hash) == 0 || (mapBlockIndex[hash]->nStatus & BLOCK_HAVE_DATA) == 0) {
|
||||||
CValidationState state;
|
CValidationState state;
|
||||||
if (ProcessNewBlock(state, NULL, &block, dbp))
|
if (ProcessNewBlock(state, NULL, &block, dbp))
|
||||||
nLoaded++;
|
nLoaded++;
|
||||||
if (state.IsError())
|
if (state.IsError())
|
||||||
break;
|
break;
|
||||||
|
} else if (hash != Params().HashGenesisBlock() && mapBlockIndex[hash]->nHeight % 1000 == 0) {
|
||||||
|
LogPrintf("Block Import: already had block %s at height %d\n", hash.ToString(), mapBlockIndex[hash]->nHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Recursively process earlier encountered successors of this block
|
// Recursively process earlier encountered successors of this block
|
||||||
|
Loading…
Reference in New Issue
Block a user