mirror of
https://github.com/monero-project/monero.git
synced 2025-08-15 02:05:28 -04:00
Merge pull request #2372
c867357a
cryptonote_protocol: error handling on cleanup_handle_incoming_blocks (moneromooo-monero)ce901fcb
Fix blockchain_import wedge on exception in cleanup_handle_incoming_blocks (moneromooo-monero)84fa015e
core: guard against exceptions in handle_incoming_{block,tx} (moneromooo-monero)
This commit is contained in:
commit
1e57e48342
6 changed files with 89 additions and 21 deletions
|
@ -3582,12 +3582,23 @@ void Blockchain::block_longhash_worker(uint64_t height, const std::vector<block>
|
|||
//------------------------------------------------------------------
|
||||
bool Blockchain::cleanup_handle_incoming_blocks(bool force_sync)
|
||||
{
|
||||
bool success = false;
|
||||
|
||||
MTRACE("Blockchain::" << __func__);
|
||||
CRITICAL_REGION_BEGIN(m_blockchain_lock);
|
||||
TIME_MEASURE_START(t1);
|
||||
|
||||
m_db->batch_stop();
|
||||
if (m_sync_counter > 0)
|
||||
try
|
||||
{
|
||||
m_db->batch_stop();
|
||||
success = true;
|
||||
}
|
||||
catch (const std::exception &e)
|
||||
{
|
||||
MERROR("Exception in cleanup_handle_incoming_blocks: " << e.what());
|
||||
}
|
||||
|
||||
if (success && m_sync_counter > 0)
|
||||
{
|
||||
if (force_sync)
|
||||
{
|
||||
|
@ -3622,7 +3633,7 @@ bool Blockchain::cleanup_handle_incoming_blocks(bool force_sync)
|
|||
CRITICAL_REGION_END();
|
||||
m_tx_pool.unlock();
|
||||
|
||||
return true;
|
||||
return success;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
|
|
@ -583,6 +583,8 @@ namespace cryptonote
|
|||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::handle_incoming_txs(const std::list<blobdata>& tx_blobs, std::vector<tx_verification_context>& tvc, bool keeped_by_block, bool relayed, bool do_not_relay)
|
||||
{
|
||||
TRY_ENTRY();
|
||||
|
||||
struct result { bool res; cryptonote::transaction tx; crypto::hash hash; crypto::hash prefix_hash; bool in_txpool; bool in_blockchain; };
|
||||
std::vector<result> results(tx_blobs.size());
|
||||
|
||||
|
@ -636,6 +638,8 @@ namespace cryptonote
|
|||
MDEBUG("tx added: " << results[i].hash);
|
||||
}
|
||||
return ok;
|
||||
|
||||
CATCH_ENTRY_L0("core::handle_incoming_txs()", false);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::handle_incoming_tx(const blobdata& tx_blob, tx_verification_context& tvc, bool keeped_by_block, bool relayed, bool do_not_relay)
|
||||
|
@ -1062,17 +1066,20 @@ namespace cryptonote
|
|||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::cleanup_handle_incoming_blocks(bool force_sync)
|
||||
{
|
||||
bool success = false;
|
||||
try {
|
||||
m_blockchain_storage.cleanup_handle_incoming_blocks(force_sync);
|
||||
success = m_blockchain_storage.cleanup_handle_incoming_blocks(force_sync);
|
||||
}
|
||||
catch (...) {}
|
||||
m_incoming_tx_lock.unlock();
|
||||
return true;
|
||||
return success;
|
||||
}
|
||||
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
bool core::handle_incoming_block(const blobdata& block_blob, block_verification_context& bvc, bool update_miner_blocktemplate)
|
||||
{
|
||||
TRY_ENTRY();
|
||||
|
||||
// load json & DNS checkpoints every 10min/hour respectively,
|
||||
// and verify them with respect to what blocks we already have
|
||||
CHECK_AND_ASSERT_MES(update_checkpoints(), false, "One or more checkpoints loaded from json or dns conflicted with existing checkpoints.");
|
||||
|
@ -1096,6 +1103,8 @@ namespace cryptonote
|
|||
if(update_miner_blocktemplate && bvc.m_added_to_main_chain)
|
||||
update_miner_block_template();
|
||||
return true;
|
||||
|
||||
CATCH_ENTRY_L0("core::handle_incoming_block()", false);
|
||||
}
|
||||
//-----------------------------------------------------------------------------------------------
|
||||
// Used by the RPC server to check the size of an incoming
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue