Browse Source

Decouple CChain from mapBlockIndex

tags/v0.15.1
jtimon 6 years ago
parent
commit
6db83db3eb
3 changed files with 10 additions and 9 deletions
  1. 1
    1
      src/init.cpp
  2. 6
    5
      src/main.cpp
  3. 3
    3
      src/main.h

+ 1
- 1
src/init.cpp View File

@@ -1151,7 +1151,7 @@ bool AppInit2(boost::thread_group& threadGroup)
CWalletDB walletdb(strWalletFile);
CBlockLocator locator;
if (walletdb.ReadBestBlock(locator))
pindexRescan = chainActive.FindFork(locator);
pindexRescan = FindForkInGlobalIndex(chainActive, locator);
else
pindexRescan = chainActive.Genesis();
}

+ 6
- 5
src/main.cpp View File

@@ -431,18 +431,19 @@ CBlockLocator CChain::GetLocator(const CBlockIndex *pindex) const {
return CBlockLocator(vHave);
}

CBlockIndex *CChain::FindFork(const CBlockLocator &locator) const {
CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& locator)
{
// Find the first block the caller has in the main chain
BOOST_FOREACH(const uint256& hash, locator.vHave) {
BlockMap::iterator mi = mapBlockIndex.find(hash);
if (mi != mapBlockIndex.end())
{
CBlockIndex* pindex = (*mi).second;
if (Contains(pindex))
if (chain.Contains(pindex))
return pindex;
}
}
return Genesis();
return chain.Genesis();
}

const CBlockIndex *CChain::FindFork(const CBlockIndex *pindex) const {
@@ -3672,7 +3673,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
LOCK(cs_main);

// Find the last block the caller has in the main chain
CBlockIndex* pindex = chainActive.FindFork(locator);
CBlockIndex* pindex = FindForkInGlobalIndex(chainActive, locator);

// Send the rest of the chain
if (pindex)
@@ -3719,7 +3720,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
else
{
// Find the last block the caller has in the main chain
pindex = chainActive.FindFork(locator);
pindex = FindForkInGlobalIndex(chainActive, locator);
if (pindex)
pindex = chainActive.Next(pindex);
}

+ 3
- 3
src/main.h View File

@@ -953,13 +953,13 @@ public:
/** Return a CBlockLocator that refers to a block in this chain (by default the tip). */
CBlockLocator GetLocator(const CBlockIndex *pindex = NULL) const;

/** Find the last common block between this chain and a locator. */
CBlockIndex *FindFork(const CBlockLocator &locator) const;

/** Find the last common block between this chain and a block index entry. */
const CBlockIndex *FindFork(const CBlockIndex *pindex) const;
};

/** Find the last common block between the parameter chain and a locator. */
CBlockIndex* FindForkInGlobalIndex(const CChain& chain, const CBlockLocator& locator);

/** The currently-connected chain of blocks. */
extern CChain chainActive;


Loading…
Cancel
Save