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:
parent
6e78915061
commit
53f040445f
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue