aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-08-29 13:01:45 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-08-29 13:03:54 +0100
commit0ffad5a359eb18a21c559570b05d5507f0f31506 (patch)
tree9f1cf7ec834b233ad76da25afc72fcbaf51b151b
parentMerge pull request #2343 (diff)
downloadmonero-0ffad5a359eb18a21c559570b05d5507f0f31506.tar.xz
core: guard against exceptions in handle_incoming_{block,tx}
When one happens, cleanup must be called or the incoming tx lock will stay locked
-rw-r--r--src/cryptonote_core/cryptonote_core.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp
index c406dd0b4..af0616af0 100644
--- a/src/cryptonote_core/cryptonote_core.cpp
+++ b/src/cryptonote_core/cryptonote_core.cpp
@@ -585,6 +585,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());
@@ -638,6 +640,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)
@@ -1075,6 +1079,8 @@ namespace cryptonote
//-----------------------------------------------------------------------------------------------
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.");
@@ -1098,6 +1104,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