diff options
author | Riccardo Spagni <ric@spagni.net> | 2016-12-04 22:27:41 +0200 |
---|---|---|
committer | Riccardo Spagni <ric@spagni.net> | 2016-12-04 22:27:41 +0200 |
commit | 80863796807ecd524f4a76964b2d58167f819e26 (patch) | |
tree | 4430f9061380e9ae62eeb313e8ccb19aa8e70c4c /src/cryptonote_protocol | |
parent | Merge pull request #1396 (diff) | |
parent | Fix delayed exit when syncing (diff) | |
download | monero-80863796807ecd524f4a76964b2d58167f819e26.tar.xz |
Merge pull request #1397
3f7d6fb5 Fix delayed exit when syncing (moneromooo-monero)
Diffstat (limited to 'src/cryptonote_protocol')
-rw-r--r-- | src/cryptonote_protocol/cryptonote_protocol_handler.h | 2 | ||||
-rw-r--r-- | src/cryptonote_protocol/cryptonote_protocol_handler.inl | 22 |
2 files changed, 22 insertions, 2 deletions
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.h b/src/cryptonote_protocol/cryptonote_protocol_handler.h index ab5d8230d..6bf630834 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.h +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.h @@ -109,6 +109,7 @@ namespace cryptonote bool is_synchronized(){return m_synchronized;} void log_connections(); std::list<connection_info> get_connections(); + void stop(); private: //----------------- commands handlers ---------------------------------------------- int handle_notify_new_block(int command, NOTIFY_NEW_BLOCK::request& arg, cryptonote_connection_context& context); @@ -135,6 +136,7 @@ namespace cryptonote std::atomic<uint32_t> m_syncronized_connections_count; std::atomic<bool> m_synchronized; bool m_one_request = true; + std::atomic<bool> m_stopping; // static std::ofstream m_logreq; boost::mutex m_buffer_mutex; diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 35266fc7c..51ade0221 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -60,7 +60,8 @@ namespace cryptonote t_cryptonote_protocol_handler<t_core>::t_cryptonote_protocol_handler(t_core& rcore, nodetool::i_p2p_endpoint<connection_context>* p_net_layout):m_core(rcore), m_p2p(p_net_layout), m_syncronized_connections_count(0), - m_synchronized(false) + m_synchronized(false), + m_stopping(false) { if(!m_p2p) @@ -793,6 +794,11 @@ namespace cryptonote size_t count = 0; BOOST_FOREACH(const block_complete_entry& block_entry, arg.blocks) { + if (m_stopping) + { + return 1; + } + ++count; block b; if(!parse_and_validate_block_from_blob(block_entry.block, b)) @@ -857,6 +863,12 @@ namespace cryptonote m_core.prepare_handle_incoming_blocks(arg.blocks); BOOST_FOREACH(const block_complete_entry& block_entry, arg.blocks) { + if (m_stopping) + { + m_core.cleanup_handle_incoming_blocks(); + return 1; + } + // process transactions TIME_MEASURE_START(transactions_process_time); BOOST_FOREACH(auto& tx_blob, block_entry.txs) @@ -1146,5 +1158,11 @@ namespace cryptonote (*logreq) << "log used" << std::endl; return *logreq; } - + //------------------------------------------------------------------------------------------------------------------------ + template<class t_core> + void t_cryptonote_protocol_handler<t_core>::stop() + { + m_stopping = true; + m_core.stop(); + } } // namespace |