aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/init.cpp8
-rw-r--r--src/node/chainstate.cpp13
-rw-r--r--src/node/chainstate.h4
3 files changed, 15 insertions, 10 deletions
diff --git a/src/init.cpp b/src/init.cpp
index e52ea57bdb..80f767a431 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -1427,7 +1427,12 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
fReindexChainState,
nBlockTreeDBCache,
nCoinDBCache,
- nCoinCacheUsage);
+ nCoinCacheUsage,
+ []() {
+ uiInterface.ThreadSafeMessageBox(
+ _("Error reading from database, shutting down."),
+ "", CClientUIInterface::MSG_ERROR);
+ });
if (rv.has_value()) {
switch (rv.value()) {
case ChainstateLoadingError::ERROR_LOADING_BLOCK_DB:
@@ -1463,6 +1468,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
break;
}
} else {
+ uiInterface.InitMessage(_("Verifying blocks…").translated);
auto rv2 = VerifyLoadedChainstate(chainman,
fReset,
fReindexChainState,
diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp
index 7dbaedb483..36d10e99d9 100644
--- a/src/node/chainstate.cpp
+++ b/src/node/chainstate.cpp
@@ -8,7 +8,6 @@
#include <rpc/blockchain.h> // for RPCNotifyBlockChange
#include <util/time.h> // for GetTime
#include <node/blockstorage.h> // for CleanupBlockRevFiles, fHavePruned, fReindex
-#include <node/ui_interface.h> // for InitError, uiInterface, and CClientUIInterface member access
#include <shutdown.h> // for ShutdownRequested
#include <validation.h> // for a lot of things
@@ -20,7 +19,8 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
bool fReindexChainState,
int64_t nBlockTreeDBCache,
int64_t nCoinDBCache,
- int64_t nCoinCacheUsage)
+ int64_t nCoinCacheUsage,
+ std::function<void()> coins_error_cb)
{
auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
return fReset || fReindexChainState || chainstate->CoinsTip().GetBestBlock().IsNull();
@@ -86,11 +86,9 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
/* in_memory */ false,
/* should_wipe */ fReset || fReindexChainState);
- chainstate->CoinsErrorCatcher().AddReadErrCallback([]() {
- uiInterface.ThreadSafeMessageBox(
- _("Error reading from database, shutting down."),
- "", CClientUIInterface::MSG_ERROR);
- });
+ if (coins_error_cb) {
+ chainstate->CoinsErrorCatcher().AddReadErrCallback(coins_error_cb);
+ }
// If necessary, upgrade from older database format.
// This is a no-op if we cleared the coinsviewdb with -reindex or -reindex-chainstate
@@ -148,7 +146,6 @@ std::optional<ChainstateLoadVerifyError> VerifyLoadedChainstate(ChainstateManage
for (CChainState* chainstate : chainman.GetAll()) {
if (!is_coinsview_empty(chainstate)) {
- uiInterface.InitMessage(_("Verifying blocks…").translated);
if (fHavePruned && check_blocks > MIN_BLOCKS_TO_KEEP) {
LogPrintf("Prune: pruned datadir may not have more than %d blocks; only checking available blocks\n",
MIN_BLOCKS_TO_KEEP);
diff --git a/src/node/chainstate.h b/src/node/chainstate.h
index c122391a41..84a86a082b 100644
--- a/src/node/chainstate.h
+++ b/src/node/chainstate.h
@@ -6,6 +6,7 @@
#define BITCOIN_NODE_CHAINSTATE_H
#include <cstdint> // for int64_t
+#include <functional> // for std::function
#include <optional> // for std::optional
class CChainParams;
@@ -59,7 +60,8 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
bool fReindexChainState,
int64_t nBlockTreeDBCache,
int64_t nCoinDBCache,
- int64_t nCoinCacheUsage);
+ int64_t nCoinCacheUsage,
+ std::function<void()> coins_error_cb = nullptr);
enum class ChainstateLoadVerifyError {
ERROR_BLOCK_FROM_FUTURE,