From b927f0b17edb419cf4ab16b31e68c93a238e8739 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Sun, 3 Dec 2017 13:05:10 +0000 Subject: [PATCH] cryptonote_protocol: fix corner case looping asking for same block hashes --- src/cryptonote_protocol/cryptonote_protocol_handler.inl | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cryptonote_protocol/cryptonote_protocol_handler.inl b/src/cryptonote_protocol/cryptonote_protocol_handler.inl index 9ae24551c..48ab1eadf 100644 --- a/src/cryptonote_protocol/cryptonote_protocol_handler.inl +++ b/src/cryptonote_protocol/cryptonote_protocol_handler.inl @@ -1414,6 +1414,10 @@ skip: // take out blocks we already have while (!context.m_needed_objects.empty() && m_core.have_block(context.m_needed_objects.front())) { + // if we're popping the last hash, record it so we can ask again from that hash, + // this prevents never being able to progress on peers we get old hash lists from + if (context.m_needed_objects.size() == 1) + context.m_last_known_hash = context.m_needed_objects.front(); context.m_needed_objects.pop_front(); } const uint64_t first_block_height = context.m_last_response_height - context.m_needed_objects.size() + 1;