aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authormrbandrews <bandrewsny@gmail.com>2015-04-09 11:08:39 -0400
committermrbandrews <bandrewsny@gmail.com>2015-04-14 14:10:19 -0400
commit0421c18f3a261f04e83a03f59884e5798af74fd9 (patch)
tree7832041ab8119c93b5d19ca00460dc5c7d18511a /src
parentd3eb5ae46a4cc05a0b1dfdba66e704cb5e7886f1 (diff)
downloadbitcoin-0421c18f3a261f04e83a03f59884e5798af74fd9.tar.xz
Fix CheckBlockIndex for reindex.
Some tests in CheckBlockIndex require chainActive.Tip(), but when reindexing, chainActive has not been set on the first call to CheckBlockIndex. reindex.py starts a node, mines 3 blocks, stops, and reindexes with CheckBlockIndex enabled.
Diffstat (limited to 'src')
-rw-r--r--src/main.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 8fb6766301..a9051118a8 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3227,6 +3227,14 @@ void static CheckBlockIndex()
LOCK(cs_main);
+ // During a reindex, we read the genesis block and call CheckBlockIndex before ActivateBestChain,
+ // so we have the genesis block in mapBlockIndex but no active chain. (A few of the tests when
+ // iterating the block tree require that chainActive has been initialized.)
+ if (chainActive.Height() < 0) {
+ assert(mapBlockIndex.size() <= 1);
+ return;
+ }
+
// Build forward-pointing map of the entire block tree.
std::multimap<CBlockIndex*,CBlockIndex*> forward;
for (BlockMap::iterator it = mapBlockIndex.begin(); it != mapBlockIndex.end(); it++) {