0
0
Fork 0
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:
Carl Dong 2020-10-06 17:35:11 -04:00
parent 972c5166ee
commit 6f994882de
7 changed files with 8 additions and 35 deletions

View file

@ -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(),

View file

@ -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() {}

View file

@ -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;

View file

@ -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)

View file

@ -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();
} }

View file

@ -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.

View file

@ -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;