aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-08-29 16:10:53 +0100
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-08-29 16:10:53 +0100
commita3662baefb3ce33867fcb798cfae5e84f7d9af20 (patch)
tree5895bde270b90bff47cdfb506213fc4483a6dd86
parentFix blockchain_import wedge on exception in cleanup_handle_incoming_blocks (diff)
downloadmonero-a3662baefb3ce33867fcb798cfae5e84f7d9af20.tar.xz
cryptonote_protocol: error handling on cleanup_handle_incoming_blocks
-rw-r--r--src/cryptonote_protocol/cryptonote_protocol_handler.inl40
1 files changed, 34 insertions, 6 deletions
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
index e762cf9c8..c14e0e896 100644
--- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl
+++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl
@@ -364,7 +364,12 @@ namespace cryptonote
block_verification_context bvc = boost::value_initialized<block_verification_context>();
m_core.handle_incoming_block(arg.b.block, bvc); // got block from handle_notify_new_block
- m_core.cleanup_handle_incoming_blocks(true);
+ if (!m_core.cleanup_handle_incoming_blocks(true))
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ m_core.resume_mine();
+ return 1;
+ }
m_core.resume_mine();
if(bvc.m_verifivation_failed)
{
@@ -623,7 +628,12 @@ namespace cryptonote
block_verification_context bvc = boost::value_initialized<block_verification_context>();
m_core.handle_incoming_block(arg.b.block, bvc); // got block from handle_notify_new_block
- m_core.cleanup_handle_incoming_blocks(true);
+ if (!m_core.cleanup_handle_incoming_blocks(true))
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ m_core.resume_mine();
+ return 1;
+ }
m_core.resume_mine();
if( bvc.m_verifivation_failed )
@@ -1055,7 +1065,11 @@ skip:
}))
LOG_ERROR_CCONTEXT("span connection id not found");
- m_core.cleanup_handle_incoming_blocks();
+ if (!m_core.cleanup_handle_incoming_blocks())
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ return 1;
+ }
// in case the peer had dropped beforehand, remove the span anyway so other threads can wake up and get it
m_block_queue.remove_spans(span_connection_id, start_height);
return 1;
@@ -1080,7 +1094,12 @@ skip:
}))
LOG_ERROR_CCONTEXT("span connection id not found");
- m_core.cleanup_handle_incoming_blocks();
+ if (!m_core.cleanup_handle_incoming_blocks())
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ return 1;
+ }
+
// in case the peer had dropped beforehand, remove the span anyway so other threads can wake up and get it
m_block_queue.remove_spans(span_connection_id, start_height);
return 1;
@@ -1094,7 +1113,12 @@ skip:
}))
LOG_ERROR_CCONTEXT("span connection id not found");
- m_core.cleanup_handle_incoming_blocks();
+ if (!m_core.cleanup_handle_incoming_blocks())
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ return 1;
+ }
+
// in case the peer had dropped beforehand, remove the span anyway so other threads can wake up and get it
m_block_queue.remove_spans(span_connection_id, start_height);
return 1;
@@ -1107,7 +1131,11 @@ skip:
MCINFO("sync-info", "Block process time (" << blocks.size() << " blocks, " << num_txs << " txs): " << block_process_time_full + transactions_process_time_full << " (" << transactions_process_time_full << "/" << block_process_time_full << ") ms");
- m_core.cleanup_handle_incoming_blocks();
+ if (!m_core.cleanup_handle_incoming_blocks())
+ {
+ LOG_PRINT_CCONTEXT_L0("Failure in cleanup_handle_incoming_blocks");
+ return 1;
+ }
m_block_queue.remove_spans(span_connection_id, start_height);