Check for correct thread before ending batch transaction

This commit is contained in:
Howard Chu 2017-01-15 07:50:56 -08:00 committed by Howard Chu
parent eaf8470b29
commit 3ff54bdd7a
No known key found for this signature in database
GPG Key ID: FD2A70B44AB11BA7

View File

@ -2292,6 +2292,9 @@ void BlockchainLMDB::batch_commit()
throw0(DB_ERROR("batch transaction not in progress")); throw0(DB_ERROR("batch transaction not in progress"));
if (m_write_batch_txn == nullptr) if (m_write_batch_txn == nullptr)
throw0(DB_ERROR("batch transaction not in progress")); throw0(DB_ERROR("batch transaction not in progress"));
if (m_writer != boost::this_thread::get_id())
return; // batch txn owned by other thread
check_open(); check_open();
LOG_PRINT_L3("batch transaction: committing..."); LOG_PRINT_L3("batch transaction: committing...");
@ -2316,6 +2319,8 @@ void BlockchainLMDB::batch_stop()
throw0(DB_ERROR("batch transaction not in progress")); throw0(DB_ERROR("batch transaction not in progress"));
if (m_write_batch_txn == nullptr) if (m_write_batch_txn == nullptr)
throw0(DB_ERROR("batch transaction not in progress")); throw0(DB_ERROR("batch transaction not in progress"));
if (m_writer != boost::this_thread::get_id())
return; // batch txn owned by other thread
check_open(); check_open();
LOG_PRINT_L3("batch transaction: committing..."); LOG_PRINT_L3("batch transaction: committing...");
TIME_MEASURE_START(time1); TIME_MEASURE_START(time1);
@ -2338,6 +2343,8 @@ void BlockchainLMDB::batch_abort()
throw0(DB_ERROR("batch transactions not enabled")); throw0(DB_ERROR("batch transactions not enabled"));
if (! m_batch_active) if (! m_batch_active)
throw0(DB_ERROR("batch transaction not in progress")); throw0(DB_ERROR("batch transaction not in progress"));
if (m_writer != boost::this_thread::get_id())
return; // batch txn owned by other thread
check_open(); check_open();
// for destruction of batch transaction // for destruction of batch transaction
m_write_txn = nullptr; m_write_txn = nullptr;