diff options
author | Matt Corallo <git@bluematt.me> | 2013-10-25 03:52:53 -0400 |
---|---|---|
committer | Wladimir J. van der Laan <laanwj@gmail.com> | 2013-11-26 10:15:57 +0100 |
commit | 5c55bf5af00aa9b5888b0469501fd113a144967f (patch) | |
tree | c453c8cfb707e82fd6bcfc4b18c2768666eaca8c /src | |
parent | 7084756f4f4e34818659a10f62933fcfc77fe27f (diff) |
Fix comparison tool by asking for blocks more aggressively
Rebased-from: b33b9a6fefbe832bf45a6c7717d0537f27597bff
Diffstat (limited to 'src')
-rw-r--r-- | src/main.cpp | 4 | ||||
-rw-r--r-- | src/main.h | 7 |
2 files changed, 8 insertions, 3 deletions
diff --git a/src/main.cpp b/src/main.cpp index d4816ca22f..f8d8697a3e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2123,7 +2123,7 @@ bool CBlock::CheckBlock(CValidationState &state, bool fCheckPOW, bool fCheckMerk uniqueTx.insert(GetTxHash(i)); } if (uniqueTx.size() != vtx.size()) - return state.DoS(100, error("CheckBlock() : duplicate transaction")); + return state.DoS(100, error("CheckBlock() : duplicate transaction"), true); unsigned int nSigOps = 0; BOOST_FOREACH(const CTransaction& tx, vtx) @@ -3583,7 +3583,7 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv) pfrom->AddInventoryKnown(inv); CValidationState state; - if (ProcessBlock(state, pfrom, &block)) + if (ProcessBlock(state, pfrom, &block) || state.CorruptionPossible()) mapAlreadyAskedFor.erase(inv); int nDoS; if (state.IsInvalid(nDoS)) diff --git a/src/main.h b/src/main.h index d5cd4cf0a6..e5226b6942 100644 --- a/src/main.h +++ b/src/main.h @@ -1881,13 +1881,15 @@ private: MODE_ERROR, // run-time error } mode; int nDoS; + bool corruptionPossible; public: CValidationState() : mode(MODE_VALID), nDoS(0) {} - bool DoS(int level, bool ret = false) { + bool DoS(int level, bool ret = false, bool corruptionIn = false) { if (mode == MODE_ERROR) return ret; nDoS += level; mode = MODE_INVALID; + corruptionPossible = corruptionIn; return ret; } bool Invalid(bool ret = false) { @@ -1917,6 +1919,9 @@ public: } return false; } + bool CorruptionPossible() { + return corruptionPossible; + } }; |