diff options
author | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-07-11 21:48:54 +0100 |
---|---|---|
committer | moneromooo-monero <moneromooo-monero@users.noreply.github.com> | 2017-08-07 09:33:17 +0100 |
commit | f57ee382b812e0dcd103023135934e601f9582aa (patch) | |
tree | fe48194efb3a3cda2d16594802ea807a23d347e3 /src/cryptonote_protocol/block_queue.cpp | |
parent | cryptonote_protocol: light cleanup (diff) | |
download | monero-f57ee382b812e0dcd103023135934e601f9582aa.tar.xz |
cryptonote_protocol: retry stale spans early
Connections can be dropped by the net_node layer,
unbeknownst to cryptonote_protocol, which would then
not flush any spans scheduled to that connection,
which would cause it to be only downloaded again
once it becomes the next span (possibly after a small
delay if it had been requested less than 5 seconds
ago).
Diffstat (limited to 'src/cryptonote_protocol/block_queue.cpp')
-rw-r--r-- | src/cryptonote_protocol/block_queue.cpp | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/cryptonote_protocol/block_queue.cpp b/src/cryptonote_protocol/block_queue.cpp index 8a78c7562..583c3abf4 100644 --- a/src/cryptonote_protocol/block_queue.cpp +++ b/src/cryptonote_protocol/block_queue.cpp @@ -76,6 +76,22 @@ void block_queue::flush_spans(const boost::uuids::uuid &connection_id, bool all) } } +void block_queue::flush_stale_spans(const std::set<boost::uuids::uuid> &live_connections) +{ + boost::unique_lock<boost::recursive_mutex> lock(mutex); + block_map::iterator i = blocks.begin(); + if (i != blocks.end() && is_blockchain_placeholder(*i)) + ++i; + while (i != blocks.end()) + { + block_map::iterator j = i++; + if (live_connections.find(j->connection_id) == live_connections.end() && j->blocks.size() == 0) + { + blocks.erase(j); + } + } +} + void block_queue::remove_span(uint64_t start_block_height) { boost::unique_lock<boost::recursive_mutex> lock(mutex); |