diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-09-17 14:13:59 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-09-17 14:13:59 +0100 |
commit | 3487d810344ac01f85c188d3e70afe8a1d4f0136 (patch) | |
tree | bf426ff82e07353996e62fb0fddc39b76b38ecec /src/cryptonote_protocol | |
parent | Merge pull request #2438 (diff) | |
download | monero-3487d810344ac01f85c188d3e70afe8a1d4f0136.tar.xz |
cryptonote_protocol: fix needless chain hashes downloads
The last known hash was calculated incorrectly, causing
further chain hash downloads to restart from the current
chain. When the block queue has close to 10k blocks waiting,
this causes frequent downloads of 10k more hashes, but
with only the last few hashes actually being useful.
Diffstat (limited to 'src/cryptonote_protocol')
-rw-r--r-- | src/cryptonote_protocol/cryptonote_protocol_handler.inl | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 803d948cc..be48a52fe 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -936,7 +936,8 @@ namespace cryptonote } // get the last parsed block, which should be the highest one - if(m_core.have_block(cryptonote::get_block_hash(b))) + const crypto::hash last_block_hash = cryptonote::get_block_hash(b); + if(m_core.have_block(last_block_hash)) { const uint64_t subchain_height = start_height + arg.blocks.size(); LOG_DEBUG_CC(context, "These are old blocks, ignoring: blocks " << start_height << " - " << (subchain_height-1) << ", blockchain height " << m_core.get_current_blockchain_height()); @@ -954,7 +955,7 @@ namespace cryptonote MDEBUG(context << " adding span: " << arg.blocks.size() << " at height " << start_height << ", " << dt.total_microseconds()/1e6 << " seconds, " << (rate/1e3) << " kB/s, size now " << (m_block_queue.get_data_size() + blocks_size) / 1048576.f << " MB"); m_block_queue.add_blocks(start_height, arg.blocks, context.m_connection_id, rate, blocks_size); - context.m_last_known_hash = cryptonote::get_blob_hash(arg.blocks.back().block); + context.m_last_known_hash = last_block_hash; if (!m_core.get_test_drop_download() || !m_core.get_test_drop_download_height()) { // DISCARD BLOCKS for testing return 1; |