diff options
author | Wladimir J. van der Laan <laanwj@gmail.com> | 2015-07-31 17:55:05 +0200 |
---|---|---|
committer | Peter Todd <pete@petertodd.org> | 2015-10-02 12:27:20 +0200 |
commit | 5094a81d3b920283333623b49ac382d0b545642e (patch) | |
tree | a27ba09a751d627fd01b399adfc9cedc9cefea39 /src | |
parent | ec9b6c33e813021948c53356173e313b43b03c13 (diff) |
Move recentRejects initialization to top of InitBlockIndex
This avoids that premature return in the condition that a new chain is initialized
results in NULL pointer errors due to recentReject not being constructed.
Also add assertions where it is used.
(cherry picked from commit a8d0407c4fcf7c4e8ed0e8edabd204f7a4efa477)
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index eeec0097d8..cb41afc96b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -3404,6 +3404,10 @@ bool LoadBlockIndex() bool InitBlockIndex() { const CChainParams& chainparams = Params(); LOCK(cs_main); + + // Initialize global variables that cannot be constructed at startup. + recentRejects.reset(new CRollingBloomFilter(120000, 0.000001)); + // Check whether we're already initialized if (chainActive.Genesis() != NULL) return true; @@ -3437,9 +3441,6 @@ bool InitBlockIndex() { } } - // Initialize global variables that cannot be constructed at startup. - recentRejects.reset(new CRollingBloomFilter(120000, 0.000001)); - return true; } @@ -3809,6 +3810,7 @@ bool static AlreadyHave(const CInv& inv) { case MSG_TX: { + assert(recentRejects); if (chainActive.Tip()->GetBlockHash() != hashRecentRejectsChainTip) { // If the chain tip has changed previously rejected transactions @@ -4422,6 +4424,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // Probably non-standard or insufficient fee/priority LogPrint("mempool", " removed orphan tx %s\n", orphanHash.ToString()); vEraseQueue.push_back(orphanHash); + assert(recentRejects); recentRejects->insert(orphanHash); } mempool.check(pcoinsTip); @@ -4445,6 +4448,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv, // already in the mempool; if the tx isn't in the mempool that // means it was rejected and we shouldn't ask for it again. if (!mempool.exists(tx.GetHash())) { + assert(recentRejects); recentRejects->insert(tx.GetHash()); } if (pfrom->fWhitelisted) { |