blockchain: call deinit in dtor
This ensures the io service that runs in another thread cannot access data after it's deleted
This commit is contained in:
parent
e282e9fa40
commit
9e64a71e7d
|
@ -171,6 +171,11 @@ Blockchain::Blockchain(tx_memory_pool& tx_pool) :
|
|||
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
Blockchain::~Blockchain()
|
||||
{
|
||||
deinit();
|
||||
}
|
||||
//------------------------------------------------------------------
|
||||
bool Blockchain::have_tx(const crypto::hash &id) const
|
||||
{
|
||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||
|
@ -550,16 +555,14 @@ bool Blockchain::deinit()
|
|||
// as this should be called if handling a SIGSEGV, need to check
|
||||
// if m_db is a NULL pointer (and thus may have caused the illegal
|
||||
// memory operation), otherwise we may cause a loop.
|
||||
if (m_db == NULL)
|
||||
{
|
||||
throw DB_ERROR("The db pointer is null in Blockchain, the blockchain may be corrupt!");
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
if (m_db)
|
||||
{
|
||||
m_db->close();
|
||||
MTRACE("Local blockchain read/write activity stopped successfully");
|
||||
}
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
LOG_ERROR(std::string("Error closing blockchain db: ") + e.what());
|
||||
|
|
|
@ -120,6 +120,11 @@ namespace cryptonote
|
|||
*/
|
||||
Blockchain(tx_memory_pool& tx_pool);
|
||||
|
||||
/**
|
||||
* @brief Blockchain destructor
|
||||
*/
|
||||
~Blockchain();
|
||||
|
||||
/**
|
||||
* @brief Initialize the Blockchain state
|
||||
*
|
||||
|
|
Loading…
Reference in New Issue