diff --git a/src/init.cpp b/src/init.cpp index 88610adfcb..023f07f678 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1895,6 +1895,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info) nBlockTreeDBCache, nCoinDBCache, nCoinCacheUsage, + ShutdownRequested, []() { uiInterface.ThreadSafeMessageBox( _("Error reading from database, shutting down."), diff --git a/src/node/chainstate.cpp b/src/node/chainstate.cpp index 6ea69fcbb5..1fbf0b3d00 100644 --- a/src/node/chainstate.cpp +++ b/src/node/chainstate.cpp @@ -7,7 +7,6 @@ #include // for CChainParams #include // for DeploymentActiveAfter #include // for CleanupBlockRevFiles, fHavePruned, fReindex -#include // for ShutdownRequested #include // for a lot of things #include // for CChainstateHelper @@ -48,6 +47,7 @@ std::optional LoadChainstate(bool fReset, int64_t nBlockTreeDBCache, int64_t nCoinDBCache, int64_t nCoinCacheUsage, + std::function shutdown_requested, std::function coins_error_cb) { auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) { @@ -106,14 +106,14 @@ std::optional LoadChainstate(bool fReset, CleanupBlockRevFiles(); } - if (ShutdownRequested()) return ChainstateLoadingError::SHUTDOWN_PROBED; + if (shutdown_requested && shutdown_requested()) return ChainstateLoadingError::SHUTDOWN_PROBED; // LoadBlockIndex will load m_have_pruned if we've ever removed a // block file from disk. // Note that it also sets fReindex based on the disk flag! // From here on out fReindex and fReset mean something different! if (!chainman.LoadBlockIndex()) { - if (ShutdownRequested()) return ChainstateLoadingError::SHUTDOWN_PROBED; + if (shutdown_requested && shutdown_requested()) return ChainstateLoadingError::SHUTDOWN_PROBED; return ChainstateLoadingError::ERROR_LOADING_BLOCK_DB; } diff --git a/src/node/chainstate.h b/src/node/chainstate.h index c838fd7851..2c023a538b 100644 --- a/src/node/chainstate.h +++ b/src/node/chainstate.h @@ -70,10 +70,10 @@ enum class ChainstateLoadingError { * differentiable by the specific enumerator. * * Note that a return value of SHUTDOWN_PROBED means ONLY that "during - * this sequence, when we explicitly checked ShutdownRequested() at + * this sequence, when we explicitly checked shutdown_requested() at * arbitrary points, one of those calls returned true". Therefore, a * return value other than SHUTDOWN_PROBED does not guarantee that - * ShutdownRequested() hasn't been called indirectly. + * shutdown_requested() hasn't been called indirectly. * - else * - Success! */ @@ -105,6 +105,7 @@ std::optional LoadChainstate(bool fReset, int64_t nBlockTreeDBCache, int64_t nCoinDBCache, int64_t nCoinCacheUsage, + std::function shutdown_requested = nullptr, std::function coins_error_cb = nullptr); enum class ChainstateLoadVerifyError {