diff options
Diffstat (limited to 'src/index')
-rw-r--r-- | src/index/base.cpp | 5 | ||||
-rw-r--r-- | src/index/base.h | 4 | ||||
-rw-r--r-- | src/index/coinstatsindex.cpp | 10 |
3 files changed, 16 insertions, 3 deletions
diff --git a/src/index/base.cpp b/src/index/base.cpp index 2e3d500cd1..8fe30f8960 100644 --- a/src/index/base.cpp +++ b/src/index/base.cpp @@ -211,6 +211,11 @@ bool BaseIndex::Commit() bool BaseIndex::CommitInternal(CDBBatch& batch) { LOCK(cs_main); + // Don't commit anything if we haven't indexed any block yet + // (this could happen if init is interrupted). + if (m_best_block_index == nullptr) { + return false; + } GetDB().WriteBestBlock(batch, m_chainstate->m_chain.GetLocator(m_best_block_index)); return true; } diff --git a/src/index/base.h b/src/index/base.h index 66149686f0..c4a8215bc4 100644 --- a/src/index/base.h +++ b/src/index/base.h @@ -40,10 +40,10 @@ protected: DB(const fs::path& path, size_t n_cache_size, bool f_memory = false, bool f_wipe = false, bool f_obfuscate = false); - /// Read block locator of the chain that the txindex is in sync with. + /// Read block locator of the chain that the index is in sync with. bool ReadBestBlock(CBlockLocator& locator) const; - /// Write block locator of the chain that the txindex is in sync with. + /// Write block locator of the chain that the index is in sync with. void WriteBestBlock(CDBBatch& batch, const CBlockLocator& locator); }; diff --git a/src/index/coinstatsindex.cpp b/src/index/coinstatsindex.cpp index ef247dc119..a1c8a5937c 100644 --- a/src/index/coinstatsindex.cpp +++ b/src/index/coinstatsindex.cpp @@ -360,7 +360,15 @@ bool CoinStatsIndex::Init() if (pindex) { DBVal entry; if (!LookUpOne(*m_db, pindex, entry)) { - return false; + return error("%s: Cannot read current %s state; index may be corrupted", + __func__, GetName()); + } + + uint256 out; + m_muhash.Finalize(out); + if (entry.muhash != out) { + return error("%s: Cannot read current %s state; index may be corrupted", + __func__, GetName()); } m_transaction_output_count = entry.transaction_output_count; |