LMDB: protection against UB, by not calling virtual methods from destructor

This commit is contained in:
mj-xmr 2021-08-13 16:34:00 +02:00
parent 8fde011dbe
commit 514f8fab14
No known key found for this signature in database
GPG key ID: C101BF94093451E0

View file

@ -1267,11 +1267,11 @@ BlockchainLMDB::~BlockchainLMDB()
// batch transaction shouldn't be active at this point. If it is, consider it aborted.
if (m_batch_active)
{
try { batch_abort(); }
try { BlockchainLMDB::batch_abort(); }
catch (...) { /* ignore */ }
}
if (m_open)
close();
BlockchainLMDB::close();
}
BlockchainLMDB::BlockchainLMDB(bool batch_transactions): BlockchainDB()
@ -1569,9 +1569,9 @@ void BlockchainLMDB::close()
if (m_batch_active)
{
LOG_PRINT_L3("close() first calling batch_abort() due to active batch transaction");
batch_abort();
BlockchainLMDB::batch_abort();
}
this->sync();
BlockchainLMDB::sync();
m_tinfo.reset();
// FIXME: not yet thread safe!!! Use with care.
@ -1584,7 +1584,7 @@ void BlockchainLMDB::sync()
LOG_PRINT_L3("BlockchainLMDB::" << __func__);
check_open();
if (is_read_only())
if (BlockchainLMDB::is_read_only())
return;
// Does nothing unless LMDB environment was opened with MDB_NOSYNC or in part