Browse Source

Eliminate unnecessary call to CheckBlock

ProcessNewBlock would return failure early if CheckBlock failed, before
calling AcceptBlock.  AcceptBlock also calls CheckBlock, and upon failure
would update mapBlockIndex to indicate that a block was failed.  By returning
early in ProcessNewBlock, we were not marking blocks that fail a check in
CheckBlock as permanently failed, and thus would continue to re-request and
reprocess them.
tags/v0.15.1
Suhas Daftuar 5 years ago
parent
commit
dbb89dc793
1 changed files with 0 additions and 6 deletions
  1. 0
    6
      src/main.cpp

+ 0
- 6
src/main.cpp View File

@@ -3171,16 +3171,10 @@ static bool IsSuperMajority(int minVersion, const CBlockIndex* pstart, unsigned

bool ProcessNewBlock(CValidationState& state, const CChainParams& chainparams, const CNode* pfrom, const CBlock* pblock, bool fForceProcessing, CDiskBlockPos* dbp)
{
// Preliminary checks
bool checked = CheckBlock(*pblock, state);

{
LOCK(cs_main);
bool fRequested = MarkBlockAsReceived(pblock->GetHash());
fRequested |= fForceProcessing;
if (!checked) {
return error("%s: CheckBlock FAILED %s", __func__, FormatStateMessage(state));
}

// Store to disk
CBlockIndex *pindex = NULL;

Loading…
Cancel
Save