cryptonote_protocol: tweaks to the syncing speedup

- only pause mining once we've got the lock (in practice, it'll
  already be paused by another thread if we can't get the lock
  at once though)
- do not call prepare_handle_incoming_blocks when we dismissed
  all the blocks, it only causes cleanup_handle_incoming_blocks
  to complain afterwards
This commit is contained in:
moneromooo-monero 2017-02-13 19:36:31 +00:00
parent 6e78915061
commit 53f040445f
No known key found for this signature in database
GPG key ID: 686F07454D6CEFC3

View file

@ -888,22 +888,22 @@ namespace cryptonote
{ {
m_core.pause_mine();
epee::misc_utils::auto_scope_leave_caller scope_exit_handler = epee::misc_utils::create_scope_leave_handler(
boost::bind(&t_core::resume_mine, &m_core));
MLOG_YELLOW(el::Level::Debug, "Got NEW BLOCKS inside of " << __FUNCTION__ << ": size: " << arg.blocks.size()); MLOG_YELLOW(el::Level::Debug, "Got NEW BLOCKS inside of " << __FUNCTION__ << ": size: " << arg.blocks.size());
if (m_core.get_test_drop_download() && m_core.get_test_drop_download_height()) { // DISCARD BLOCKS for testing if (m_core.get_test_drop_download() && m_core.get_test_drop_download_height()) { // DISCARD BLOCKS for testing
uint64_t previous_height = m_core.get_current_blockchain_height();
// we lock all the rest to avoid having multiple connections redo a lot // we lock all the rest to avoid having multiple connections redo a lot
// of the same work, and one of them doing it for nothing: subsequent // of the same work, and one of them doing it for nothing: subsequent
// connections will wait until the current one's added its blocks, then // connections will wait until the current one's added its blocks, then
// will add any extra it has, if any // will add any extra it has, if any
CRITICAL_REGION_LOCAL(m_sync_lock); CRITICAL_REGION_LOCAL(m_sync_lock);
m_core.pause_mine();
epee::misc_utils::auto_scope_leave_caller scope_exit_handler = epee::misc_utils::create_scope_leave_handler(
boost::bind(&t_core::resume_mine, &m_core));
const uint64_t previous_height = m_core.get_current_blockchain_height();
// dismiss what another connection might already have done (likely everything) // dismiss what another connection might already have done (likely everything)
uint64_t top_height; uint64_t top_height;
crypto::hash top_hash; crypto::hash top_hash;
@ -921,6 +921,9 @@ namespace cryptonote
} }
} }
if (arg.blocks.empty())
goto skip;
m_core.prepare_handle_incoming_blocks(arg.blocks); m_core.prepare_handle_incoming_blocks(arg.blocks);
for(const block_complete_entry& block_entry: arg.blocks) for(const block_complete_entry& block_entry: arg.blocks)
@ -986,6 +989,7 @@ namespace cryptonote
} }
skip:
request_missing_objects(context, true); request_missing_objects(context, true);
return 1; return 1;
} }