mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
node/chainstate: Decouple from ShutdownRequested
...instead allow optionally passing in a std::function<bool()>
This commit is contained in:
parent
05441c2dc5
commit
4da9c076d1
3 changed files with 7 additions and 5 deletions
|
@ -1430,6 +1430,7 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||||
nBlockTreeDBCache,
|
nBlockTreeDBCache,
|
||||||
nCoinDBCache,
|
nCoinDBCache,
|
||||||
nCoinCacheUsage,
|
nCoinCacheUsage,
|
||||||
|
ShutdownRequested,
|
||||||
[]() {
|
[]() {
|
||||||
uiInterface.ThreadSafeMessageBox(
|
uiInterface.ThreadSafeMessageBox(
|
||||||
_("Error reading from database, shutting down."),
|
_("Error reading from database, shutting down."),
|
||||||
|
|
|
@ -6,7 +6,6 @@
|
||||||
|
|
||||||
#include <chainparams.h> // for CChainParams
|
#include <chainparams.h> // for CChainParams
|
||||||
#include <node/blockstorage.h> // for CleanupBlockRevFiles, fHavePruned, fReindex
|
#include <node/blockstorage.h> // for CleanupBlockRevFiles, fHavePruned, fReindex
|
||||||
#include <shutdown.h> // for ShutdownRequested
|
|
||||||
#include <validation.h> // for a lot of things
|
#include <validation.h> // for a lot of things
|
||||||
|
|
||||||
std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
|
std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
|
||||||
|
@ -18,6 +17,7 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
|
||||||
int64_t nBlockTreeDBCache,
|
int64_t nBlockTreeDBCache,
|
||||||
int64_t nCoinDBCache,
|
int64_t nCoinDBCache,
|
||||||
int64_t nCoinCacheUsage,
|
int64_t nCoinCacheUsage,
|
||||||
|
std::function<bool()> shutdown_requested,
|
||||||
std::function<void()> coins_error_cb)
|
std::function<void()> coins_error_cb)
|
||||||
{
|
{
|
||||||
auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
auto is_coinsview_empty = [&](CChainState* chainstate) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
||||||
|
@ -45,14 +45,14 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
|
||||||
CleanupBlockRevFiles();
|
CleanupBlockRevFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ShutdownRequested()) return ChainstateLoadingError::SHUTDOWN_PROBED;
|
if (shutdown_requested && shutdown_requested()) return ChainstateLoadingError::SHUTDOWN_PROBED;
|
||||||
|
|
||||||
// LoadBlockIndex will load fHavePruned if we've ever removed a
|
// LoadBlockIndex will load fHavePruned if we've ever removed a
|
||||||
// block file from disk.
|
// block file from disk.
|
||||||
// Note that it also sets fReindex based on the disk flag!
|
// Note that it also sets fReindex based on the disk flag!
|
||||||
// From here on out fReindex and fReset mean something different!
|
// From here on out fReindex and fReset mean something different!
|
||||||
if (!chainman.LoadBlockIndex()) {
|
if (!chainman.LoadBlockIndex()) {
|
||||||
if (ShutdownRequested()) return ChainstateLoadingError::SHUTDOWN_PROBED;
|
if (shutdown_requested && shutdown_requested()) return ChainstateLoadingError::SHUTDOWN_PROBED;
|
||||||
return ChainstateLoadingError::ERROR_LOADING_BLOCK_DB;
|
return ChainstateLoadingError::ERROR_LOADING_BLOCK_DB;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -45,10 +45,10 @@ enum class ChainstateLoadingError {
|
||||||
* differentiable by the specific enumerator.
|
* differentiable by the specific enumerator.
|
||||||
*
|
*
|
||||||
* Note that a return value of SHUTDOWN_PROBED means ONLY that "during
|
* 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
|
* arbitrary points, one of those calls returned true". Therefore, a
|
||||||
* return value other than SHUTDOWN_PROBED does not guarantee that
|
* return value other than SHUTDOWN_PROBED does not guarantee that
|
||||||
* ShutdownRequested() hasn't been called indirectly.
|
* shutdown_requested() hasn't been called indirectly.
|
||||||
* - else
|
* - else
|
||||||
* - Success!
|
* - Success!
|
||||||
*/
|
*/
|
||||||
|
@ -61,6 +61,7 @@ std::optional<ChainstateLoadingError> LoadChainstate(bool fReset,
|
||||||
int64_t nBlockTreeDBCache,
|
int64_t nBlockTreeDBCache,
|
||||||
int64_t nCoinDBCache,
|
int64_t nCoinDBCache,
|
||||||
int64_t nCoinCacheUsage,
|
int64_t nCoinCacheUsage,
|
||||||
|
std::function<bool()> shutdown_requested = nullptr,
|
||||||
std::function<void()> coins_error_cb = nullptr);
|
std::function<void()> coins_error_cb = nullptr);
|
||||||
|
|
||||||
enum class ChainstateLoadVerifyError {
|
enum class ChainstateLoadVerifyError {
|
||||||
|
|
Loading…
Add table
Reference in a new issue