Merge pull request #3231

84a8b2da Don't create readtxn until after txn_safe gate check (Howard Chu)
This commit is contained in:
Riccardo Spagni 2018-02-16 14:24:01 +01:00
commit 260d666cf4
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
2 changed files with 10 additions and 2 deletions

View File

@ -338,6 +338,12 @@ mdb_txn_safe::~mdb_txn_safe()
num_active_txns--; num_active_txns--;
} }
void mdb_txn_safe::uncheck()
{
num_active_txns--;
m_check = false;
}
void mdb_txn_safe::commit(std::string message) void mdb_txn_safe::commit(std::string message)
{ {
if (message.size() == 0) if (message.size() == 0)
@ -1439,9 +1445,10 @@ void BlockchainLMDB::unlock()
#define TXN_PREFIX_RDONLY() \ #define TXN_PREFIX_RDONLY() \
MDB_txn *m_txn; \ MDB_txn *m_txn; \
mdb_txn_cursors *m_cursors; \ mdb_txn_cursors *m_cursors; \
mdb_txn_safe auto_txn; \
bool my_rtxn = block_rtxn_start(&m_txn, &m_cursors); \ bool my_rtxn = block_rtxn_start(&m_txn, &m_cursors); \
mdb_txn_safe auto_txn(my_rtxn); \ if (my_rtxn) auto_txn.m_tinfo = m_tinfo.get(); \
if (my_rtxn) auto_txn.m_tinfo = m_tinfo.get() else auto_txn.uncheck()
#define TXN_POSTFIX_RDONLY() #define TXN_POSTFIX_RDONLY()
#define TXN_POSTFIX_SUCCESS() \ #define TXN_POSTFIX_SUCCESS() \

View File

@ -112,6 +112,7 @@ struct mdb_txn_safe
// BlockchainLMDB destructor to call mdb_txn_safe destructor, as that's too late // BlockchainLMDB destructor to call mdb_txn_safe destructor, as that's too late
// to properly abort, since mdb_env_close would have been called earlier. // to properly abort, since mdb_env_close would have been called earlier.
void abort(); void abort();
void uncheck();
operator MDB_txn*() operator MDB_txn*()
{ {