diff options
author | Carl Dong <contact@carldong.me> | 2022-03-15 19:28:46 -0400 |
---|---|---|
committer | Carl Dong <contact@carldong.me> | 2022-03-15 19:42:43 -0400 |
commit | f865cf8ded2b2fbc82a6fbc41226d991909a6880 (patch) | |
tree | 1f8a540512d05671c936cbe58cfb1f3b0a3c19dd | |
parent | 28ba0313eac37e4a900b7e97af7169ce999c4024 (diff) |
Add and use BlockManager::GetAllBlockIndices
-rw-r--r-- | src/node/blockstorage.cpp | 17 | ||||
-rw-r--r-- | src/node/blockstorage.h | 2 | ||||
-rw-r--r-- | src/validation.cpp | 6 |
3 files changed, 15 insertions, 10 deletions
diff --git a/src/node/blockstorage.cpp b/src/node/blockstorage.cpp index 73bc4e0072..763fd29744 100644 --- a/src/node/blockstorage.cpp +++ b/src/node/blockstorage.cpp @@ -56,6 +56,17 @@ static FILE* OpenUndoFile(const FlatFilePos& pos, bool fReadOnly = false); static FlatFileSeq BlockFileSeq(); static FlatFileSeq UndoFileSeq(); +std::vector<CBlockIndex*> BlockManager::GetAllBlockIndices() +{ + AssertLockHeld(cs_main); + std::vector<CBlockIndex*> rv; + rv.reserve(m_block_index.size()); + for (auto& [_, block_index] : m_block_index) { + rv.push_back(&block_index); + } + return rv; +} + CBlockIndex* BlockManager::LookupBlockIndex(const uint256& hash) { AssertLockHeld(cs_main); @@ -242,11 +253,7 @@ bool BlockManager::LoadBlockIndex(const Consensus::Params& consensus_params) } // Calculate nChainWork - std::vector<CBlockIndex*> vSortedByHeight; - vSortedByHeight.reserve(m_block_index.size()); - for (auto& [_, block_index] : m_block_index) { - vSortedByHeight.push_back(&block_index); - } + std::vector<CBlockIndex*> vSortedByHeight{GetAllBlockIndices()}; std::sort(vSortedByHeight.begin(), vSortedByHeight.end(), CBlockIndexHeightOnlyComparator()); diff --git a/src/node/blockstorage.h b/src/node/blockstorage.h index 0fd87ddaf1..a051e90808 100644 --- a/src/node/blockstorage.h +++ b/src/node/blockstorage.h @@ -123,6 +123,8 @@ private: public: BlockMap m_block_index GUARDED_BY(cs_main); + std::vector<CBlockIndex*> GetAllBlockIndices() EXCLUSIVE_LOCKS_REQUIRED(::cs_main); + /** * All pairs A->B, where A (or one of its ancestors) misses transactions, but B has transactions. * Pruned nodes may have entries where B is missing data. diff --git a/src/validation.cpp b/src/validation.cpp index 2828b4ae98..58488be3a7 100644 --- a/src/validation.cpp +++ b/src/validation.cpp @@ -4069,11 +4069,7 @@ bool ChainstateManager::LoadBlockIndex() bool ret = m_blockman.LoadBlockIndexDB(); if (!ret) return false; - std::vector<CBlockIndex*> vSortedByHeight; - vSortedByHeight.reserve(m_blockman.m_block_index.size()); - for (auto& [_, block_index] : m_blockman.m_block_index) { - vSortedByHeight.push_back(&block_index); - } + std::vector<CBlockIndex*> vSortedByHeight{m_blockman.GetAllBlockIndices()}; std::sort(vSortedByHeight.begin(), vSortedByHeight.end(), CBlockIndexHeightOnlyComparator()); |