wallet2: fix hang in wallet refresh

If the hashes received would move the current blockchain past the
stop point, the short history would not be updated, since we do
not expect another loop, but the daemon might return earlier hashes,
causing the end index to not be enough to reach the threshold and
this require another loop, which will download the same hashes and
cause an infinite loop.
This commit is contained in:
moneromooo-monero 2019-12-14 16:21:55 +00:00
parent b4e1dc83d2
commit 5cbb17b946
No known key found for this signature in database
GPG Key ID: 686F07454D6CEFC3

View File

@ -3114,6 +3114,7 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
MERROR("Blocks start before blockchain offset: " << blocks_start_height << " " << m_blockchain.offset()); MERROR("Blocks start before blockchain offset: " << blocks_start_height << " " << m_blockchain.offset());
return; return;
} }
current_index = blocks_start_height;
if (hashes.size() + current_index < stop_height) { if (hashes.size() + current_index < stop_height) {
drop_from_short_history(short_chain_history, 3); drop_from_short_history(short_chain_history, 3);
std::vector<crypto::hash>::iterator right = hashes.end(); std::vector<crypto::hash>::iterator right = hashes.end();
@ -3123,7 +3124,6 @@ void wallet2::fast_refresh(uint64_t stop_height, uint64_t &blocks_start_height,
short_chain_history.push_front(*right); short_chain_history.push_front(*right);
} }
} }
current_index = blocks_start_height;
for(auto& bl_id: hashes) for(auto& bl_id: hashes)
{ {
if(current_index >= m_blockchain.size()) if(current_index >= m_blockchain.size())