mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-02 09:46:52 -05:00
validation: Farewell, global Chainstate!
This commit is contained in:
parent
972c5166ee
commit
6f994882de
7 changed files with 8 additions and 35 deletions
|
@ -283,7 +283,7 @@ void Shutdown(NodeContext& node)
|
||||||
init::UnsetGlobals();
|
init::UnsetGlobals();
|
||||||
node.mempool.reset();
|
node.mempool.reset();
|
||||||
node.fee_estimator.reset();
|
node.fee_estimator.reset();
|
||||||
node.chainman = nullptr;
|
node.chainman.reset();
|
||||||
node.scheduler.reset();
|
node.scheduler.reset();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -1179,8 +1179,8 @@ bool AppInitMain(NodeContext& node, interfaces::BlockAndHeaderTipInfo* tip_info)
|
||||||
node.mempool = std::make_unique<CTxMemPool>(node.fee_estimator.get(), check_ratio);
|
node.mempool = std::make_unique<CTxMemPool>(node.fee_estimator.get(), check_ratio);
|
||||||
|
|
||||||
assert(!node.chainman);
|
assert(!node.chainman);
|
||||||
node.chainman = &g_chainman;
|
node.chainman = std::make_unique<ChainstateManager>();
|
||||||
ChainstateManager& chainman = *Assert(node.chainman);
|
ChainstateManager& chainman = *node.chainman;
|
||||||
|
|
||||||
assert(!node.peerman);
|
assert(!node.peerman);
|
||||||
node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(),
|
node.peerman = PeerManager::make(chainparams, *node.connman, *node.addrman, node.banman.get(),
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
#include <policy/fees.h>
|
#include <policy/fees.h>
|
||||||
#include <scheduler.h>
|
#include <scheduler.h>
|
||||||
#include <txmempool.h>
|
#include <txmempool.h>
|
||||||
|
#include <validation.h>
|
||||||
|
|
||||||
NodeContext::NodeContext() {}
|
NodeContext::NodeContext() {}
|
||||||
NodeContext::~NodeContext() {}
|
NodeContext::~NodeContext() {}
|
||||||
|
|
|
@ -44,7 +44,7 @@ struct NodeContext {
|
||||||
std::unique_ptr<CTxMemPool> mempool;
|
std::unique_ptr<CTxMemPool> mempool;
|
||||||
std::unique_ptr<CBlockPolicyEstimator> fee_estimator;
|
std::unique_ptr<CBlockPolicyEstimator> fee_estimator;
|
||||||
std::unique_ptr<PeerManager> peerman;
|
std::unique_ptr<PeerManager> peerman;
|
||||||
ChainstateManager* chainman{nullptr}; // Currently a raw pointer because the memory is not managed by this struct
|
std::unique_ptr<ChainstateManager> chainman;
|
||||||
std::unique_ptr<BanMan> banman;
|
std::unique_ptr<BanMan> banman;
|
||||||
ArgsManager* args{nullptr}; // Currently a raw pointer because the memory is not managed by this struct
|
ArgsManager* args{nullptr}; // Currently a raw pointer because the memory is not managed by this struct
|
||||||
std::unique_ptr<interfaces::Chain> chain;
|
std::unique_ptr<interfaces::Chain> chain;
|
||||||
|
|
|
@ -125,7 +125,7 @@ static ChainstateManager* GetChainman(const std::any& context, HTTPRequest* req)
|
||||||
__FILE__, __LINE__, __func__, PACKAGE_BUGREPORT));
|
__FILE__, __LINE__, __func__, PACKAGE_BUGREPORT));
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
return node_context->chainman;
|
return node_context->chainman.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
static RetFormat ParseDataFormat(std::string& param, const std::string& strReq)
|
static RetFormat ParseDataFormat(std::string& param, const std::string& strReq)
|
||||||
|
|
|
@ -145,7 +145,7 @@ ChainTestingSetup::ChainTestingSetup(const std::string& chainName, const std::ve
|
||||||
m_node.fee_estimator = std::make_unique<CBlockPolicyEstimator>();
|
m_node.fee_estimator = std::make_unique<CBlockPolicyEstimator>();
|
||||||
m_node.mempool = std::make_unique<CTxMemPool>(m_node.fee_estimator.get(), 1);
|
m_node.mempool = std::make_unique<CTxMemPool>(m_node.fee_estimator.get(), 1);
|
||||||
|
|
||||||
m_node.chainman = &::g_chainman;
|
m_node.chainman = std::make_unique<ChainstateManager>();
|
||||||
|
|
||||||
// Start script-checking threads. Set g_parallel_script_checks to true so they are used.
|
// Start script-checking threads. Set g_parallel_script_checks to true so they are used.
|
||||||
constexpr int script_check_threads = 2;
|
constexpr int script_check_threads = 2;
|
||||||
|
@ -167,7 +167,7 @@ ChainTestingSetup::~ChainTestingSetup()
|
||||||
m_node.mempool.reset();
|
m_node.mempool.reset();
|
||||||
m_node.scheduler.reset();
|
m_node.scheduler.reset();
|
||||||
m_node.chainman->Reset();
|
m_node.chainman->Reset();
|
||||||
m_node.chainman = nullptr;
|
m_node.chainman.reset();
|
||||||
pblocktree.reset();
|
pblocktree.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -101,21 +101,6 @@ bool CBlockIndexWorkComparator::operator()(const CBlockIndex *pa, const CBlockIn
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ChainstateManager g_chainman;
|
|
||||||
|
|
||||||
CChainState& ChainstateActive()
|
|
||||||
{
|
|
||||||
LOCK(::cs_main);
|
|
||||||
assert(g_chainman.m_active_chainstate);
|
|
||||||
return *g_chainman.m_active_chainstate;
|
|
||||||
}
|
|
||||||
|
|
||||||
CChain& ChainActive()
|
|
||||||
{
|
|
||||||
LOCK(::cs_main);
|
|
||||||
return ::ChainstateActive().m_chain;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mutex to guard access to validation specific variables, such as reading
|
* Mutex to guard access to validation specific variables, such as reading
|
||||||
* or changing the chainstate.
|
* or changing the chainstate.
|
||||||
|
|
|
@ -891,10 +891,6 @@ private:
|
||||||
CAutoFile& coins_file,
|
CAutoFile& coins_file,
|
||||||
const SnapshotMetadata& metadata);
|
const SnapshotMetadata& metadata);
|
||||||
|
|
||||||
// For access to m_active_chainstate.
|
|
||||||
friend CChainState& ChainstateActive();
|
|
||||||
friend CChain& ChainActive();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::thread m_load_block;
|
std::thread m_load_block;
|
||||||
//! A single BlockManager instance is shared across each constructed
|
//! A single BlockManager instance is shared across each constructed
|
||||||
|
@ -1025,15 +1021,6 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/** DEPRECATED! Please use node.chainman instead. May only be used in validation.cpp internally */
|
|
||||||
extern ChainstateManager g_chainman GUARDED_BY(::cs_main);
|
|
||||||
|
|
||||||
/** Please prefer the identical ChainstateManager::ActiveChainstate */
|
|
||||||
CChainState& ChainstateActive();
|
|
||||||
|
|
||||||
/** Please prefer the identical ChainstateManager::ActiveChain */
|
|
||||||
CChain& ChainActive();
|
|
||||||
|
|
||||||
/** Global variable that points to the active block tree (protected by cs_main) */
|
/** Global variable that points to the active block tree (protected by cs_main) */
|
||||||
extern std::unique_ptr<CBlockTreeDB> pblocktree;
|
extern std::unique_ptr<CBlockTreeDB> pblocktree;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue