Fix missing cs_main lock for GuessVerificationProgress()
This commit is contained in:
parent
6970b30c6f
commit
90ba2df11b
3 changed files with 6 additions and 9 deletions
|
@ -138,9 +138,9 @@ size_t ClientModel::getMempoolDynamicUsage() const
|
|||
double ClientModel::getVerificationProgress(const CBlockIndex *tipIn) const
|
||||
{
|
||||
CBlockIndex *tip = const_cast<CBlockIndex *>(tipIn);
|
||||
LOCK(cs_main);
|
||||
if (!tip)
|
||||
{
|
||||
LOCK(cs_main);
|
||||
tip = chainActive.Tip();
|
||||
}
|
||||
return GuessVerificationProgress(Params().TxData(), tip);
|
||||
|
|
|
@ -4659,6 +4659,7 @@ bool DumpMempool(void)
|
|||
}
|
||||
|
||||
//! Guess how far we are in the verification process at the given block index
|
||||
//! require cs_main if pindex has not been validated yet (because nChainTx might be unset)
|
||||
double GuessVerificationProgress(const ChainTxData& data, const CBlockIndex *pindex) {
|
||||
if (pindex == nullptr)
|
||||
return 0.0;
|
||||
|
|
|
@ -1673,20 +1673,15 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
|||
dProgressStart = GuessVerificationProgress(chainParams.TxData(), pindex);
|
||||
dProgressTip = GuessVerificationProgress(chainParams.TxData(), tip);
|
||||
}
|
||||
double gvp = dProgressStart;
|
||||
while (pindex && !fAbortRescan)
|
||||
{
|
||||
if (pindex->nHeight % 100 == 0 && dProgressTip - dProgressStart > 0.0) {
|
||||
double gvp = 0;
|
||||
{
|
||||
LOCK(cs_main);
|
||||
gvp = GuessVerificationProgress(chainParams.TxData(), pindex);
|
||||
}
|
||||
ShowProgress(_("Rescanning..."), std::max(1, std::min(99, (int)((gvp - dProgressStart) / (dProgressTip - dProgressStart) * 100))));
|
||||
}
|
||||
if (GetTime() >= nNow + 60) {
|
||||
nNow = GetTime();
|
||||
LOCK(cs_main);
|
||||
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, gvp);
|
||||
}
|
||||
|
||||
CBlock block;
|
||||
|
@ -1710,6 +1705,7 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
|||
{
|
||||
LOCK(cs_main);
|
||||
pindex = chainActive.Next(pindex);
|
||||
gvp = GuessVerificationProgress(chainParams.TxData(), pindex);
|
||||
if (tip != chainActive.Tip()) {
|
||||
tip = chainActive.Tip();
|
||||
// in case the tip has changed, update progress max
|
||||
|
@ -1718,7 +1714,7 @@ CBlockIndex* CWallet::ScanForWalletTransactions(CBlockIndex* pindexStart, CBlock
|
|||
}
|
||||
}
|
||||
if (pindex && fAbortRescan) {
|
||||
LogPrintf("Rescan aborted at block %d. Progress=%f\n", pindex->nHeight, GuessVerificationProgress(chainParams.TxData(), pindex));
|
||||
LogPrintf("Rescan aborted at block %d. Progress=%f\n", pindex->nHeight, gvp);
|
||||
}
|
||||
ShowProgress(_("Rescanning..."), 100); // hide progress dialog in GUI
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue