consensus: don't call GetBlockPos in ReadBlockFromDisk without lock

This commit is contained in:
Jon Atack 2021-09-05 11:32:59 +02:00
parent f4e12fd50c
commit 350e034e64
No known key found for this signature in database
GPG key ID: 4F5721B3D0E3921D

View file

@ -394,18 +394,14 @@ bool ReadBlockFromDisk(CBlock& block, const FlatFilePos& pos, const Consensus::P
bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams) bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams)
{ {
FlatFilePos blockPos; const FlatFilePos block_pos{WITH_LOCK(cs_main, return pindex->GetBlockPos())};
{
LOCK(cs_main);
blockPos = pindex->GetBlockPos();
}
if (!ReadBlockFromDisk(block, blockPos, consensusParams)) { if (!ReadBlockFromDisk(block, block_pos, consensusParams)) {
return false; return false;
} }
if (block.GetHash() != pindex->GetBlockHash()) { if (block.GetHash() != pindex->GetBlockHash()) {
return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for %s at %s", return error("ReadBlockFromDisk(CBlock&, CBlockIndex*): GetHash() doesn't match index for %s at %s",
pindex->ToString(), pindex->GetBlockPos().ToString()); pindex->ToString(), block_pos.ToString());
} }
return true; return true;
} }