diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -1816,30 +1816,37 @@ // on startup. ShowProgress(_("Rescanning..."), 0); CBlockIndex *tip = nullptr; - double dProgressStart; - double dProgressTip; + double progress_begin; + double progress_end; { LOCK(cs_main); - tip = chainActive.Tip(); - dProgressStart = + progress_begin = GuessVerificationProgress(chainParams.TxData(), pindex); - dProgressTip = GuessVerificationProgress(chainParams.TxData(), tip); + if (pindexStop == nullptr) { + tip = chainActive.Tip(); + progress_end = + GuessVerificationProgress(chainParams.TxData(), tip); + } else { + progress_end = + GuessVerificationProgress(chainParams.TxData(), pindexStop); + } } - double gvp = dProgressStart; + double progress_current = progress_begin; while (pindex && !fAbortRescan && !ShutdownRequested()) { if (pindex->nHeight % 100 == 0 && - dProgressTip - dProgressStart > 0.0) { + progress_end - progress_begin > 0.0) { ShowProgress( _("Rescanning..."), std::max( - 1, std::min(99, (int)((gvp - dProgressStart) / - (dProgressTip - dProgressStart) * - 100)))); + 1, + std::min(99, (int)((progress_current - progress_begin) / + (progress_end - progress_begin) * + 100)))); } if (GetTime() >= nNow + 60) { nNow = GetTime(); LogPrintf("Still rescanning. At block %d. Progress=%f\n", - pindex->nHeight, gvp); + pindex->nHeight, progress_current); } CBlock block; @@ -1866,11 +1873,12 @@ { LOCK(cs_main); pindex = chainActive.Next(pindex); - gvp = GuessVerificationProgress(chainParams.TxData(), pindex); - if (tip != chainActive.Tip()) { + progress_current = + GuessVerificationProgress(chainParams.TxData(), pindex); + if (pindexStop == nullptr && tip != chainActive.Tip()) { tip = chainActive.Tip(); // in case the tip has changed, update progress max - dProgressTip = + progress_end = GuessVerificationProgress(chainParams.TxData(), tip); } } @@ -1878,11 +1886,11 @@ if (pindex && fAbortRescan) { LogPrintf("Rescan aborted at block %d. Progress=%f\n", - pindex->nHeight, gvp); + pindex->nHeight, progress_current); } else if (pindex && ShutdownRequested()) { LogPrintf("Rescan interrupted by shutdown request at block %d. " "Progress=%f\n", - pindex->nHeight, gvp); + pindex->nHeight, progress_current); } // Hide progress dialog in GUI.