From c16cc204d320fb61a462397644ec35c04286182a Mon Sep 17 00:00:00 2001 From: warptangent Date: Sat, 13 Feb 2016 03:50:42 -0800 Subject: [PATCH] BlockchainLMDB: Add sanity check for inconsistent state This hasn't been known to occur in block-level txn abort, but throw exception if it does. --- src/blockchain_db/lmdb/db_lmdb.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/blockchain_db/lmdb/db_lmdb.cpp b/src/blockchain_db/lmdb/db_lmdb.cpp index 3b3c5691..7b7af23b 100644 --- a/src/blockchain_db/lmdb/db_lmdb.cpp +++ b/src/blockchain_db/lmdb/db_lmdb.cpp @@ -2233,8 +2233,19 @@ void BlockchainLMDB::block_txn_abort() LOG_PRINT_L3("BlockchainLMDB::" << __func__); if (! m_batch_active) { - delete m_write_txn; - m_write_txn = nullptr; + if (m_write_txn != nullptr) + { + delete m_write_txn; + m_write_txn = nullptr; + } + else + { + // This would probably mean an earlier exception was caught, but then we + // proceeded further than we should have. + throw0(DB_ERROR((std::string("BlockchainLMDB::") + __func__ + + std::string(": block-level DB transaction abort called when write txn doesn't exist") + ).c_str())); + } } }