Reduce cs_main lock in ReadBlockFromDisk, only read GetBlockPos under the lock
This commit is contained in:
parent
bc356b4268
commit
ccd8ef65f9
2 changed files with 8 additions and 7 deletions
|
@ -1121,7 +1121,13 @@ bool ReadBlockFromDisk(CBlock& block, const CDiskBlockPos& pos, const Consensus:
|
||||||
|
|
||||||
bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams)
|
bool ReadBlockFromDisk(CBlock& block, const CBlockIndex* pindex, const Consensus::Params& consensusParams)
|
||||||
{
|
{
|
||||||
if (!ReadBlockFromDisk(block, pindex->GetBlockPos(), consensusParams))
|
CDiskBlockPos blockPos;
|
||||||
|
{
|
||||||
|
LOCK(cs_main);
|
||||||
|
blockPos = pindex->GetBlockPos();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!ReadBlockFromDisk(block, blockPos, 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",
|
||||||
|
|
|
@ -1689,13 +1689,8 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
||||||
LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex));
|
LogPrintf("Still rescanning. At block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool readRet = false;
|
|
||||||
CBlock block;
|
CBlock block;
|
||||||
{
|
if (ReadBlockFromDisk(block, pindex, Params().GetConsensus())) {
|
||||||
LOCK(cs_main);
|
|
||||||
readRet = ReadBlockFromDisk(block, pindex, Params().GetConsensus());
|
|
||||||
}
|
|
||||||
if (readRet) {
|
|
||||||
LOCK2(cs_main, cs_wallet);
|
LOCK2(cs_main, cs_wallet);
|
||||||
if (pindex && !chainActive.Contains(pindex)) {
|
if (pindex && !chainActive.Contains(pindex)) {
|
||||||
// Abort scan if current block is no longer active, to prevent
|
// Abort scan if current block is no longer active, to prevent
|
||||||
|
|
Loading…
Reference in a new issue