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