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.
This commit is contained in:
warptangent 2016-02-13 03:50:42 -08:00
parent 9118d0a44c
commit c16cc204d3
No known key found for this signature in database
GPG Key ID: 0E490BEBFBE4E92D
1 changed files with 13 additions and 2 deletions

View File

@ -2232,10 +2232,21 @@ void BlockchainLMDB::block_txn_abort()
{ {
LOG_PRINT_L3("BlockchainLMDB::" << __func__); LOG_PRINT_L3("BlockchainLMDB::" << __func__);
if (! m_batch_active) if (! m_batch_active)
{
if (m_write_txn != nullptr)
{ {
delete m_write_txn; delete m_write_txn;
m_write_txn = nullptr; 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()));
}
}
} }
uint64_t BlockchainLMDB::add_block(const block& blk, const size_t& block_size, const difficulty_type& cumulative_difficulty, const uint64_t& coins_generated, uint64_t BlockchainLMDB::add_block(const block& blk, const size_t& block_size, const difficulty_type& cumulative_difficulty, const uint64_t& coins_generated,