From 424cb680e515614f7473bba2c1c8f1f1239e9c38 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Mon, 7 Jan 2019 19:23:00 +0300 Subject: [PATCH] Check origination time before starting election (#1446) --- nano/node/node.cpp | 10 +++++----- nano/node/node.hpp | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 424ead7d5..465d3c36a 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1469,7 +1469,7 @@ nano::process_return nano::block_processor::process_one (nano::transaction const block_a->serialize_json (block); BOOST_LOG (node.log) << boost::str (boost::format ("Processing block %1%: %2%") % hash.to_string () % block); } - if (node.block_arrival.recent (hash)) + if (origination != std::chrono::steady_clock::time_point () && node.block_arrival.recent (hash)) { node.active.start (block_a); if (node.config.enable_voting) @@ -1477,7 +1477,7 @@ nano::process_return nano::block_processor::process_one (nano::transaction const generator.add (hash); } } - queue_unchecked (transaction_a, hash); + queue_unchecked (transaction_a, hash, origination); break; } case nano::process_result::gap_previous: @@ -1506,7 +1506,7 @@ nano::process_return nano::block_processor::process_one (nano::transaction const { BOOST_LOG (node.log) << boost::str (boost::format ("Old for: %1%") % block_a->hash ().to_string ()); } - queue_unchecked (transaction_a, hash); + queue_unchecked (transaction_a, hash, origination); node.active.update_difficulty (*block_a); break; } @@ -1580,13 +1580,13 @@ nano::process_return nano::block_processor::process_one (nano::transaction const return result; } -void nano::block_processor::queue_unchecked (nano::transaction const & transaction_a, nano::block_hash const & hash_a) +void nano::block_processor::queue_unchecked (nano::transaction const & transaction_a, nano::block_hash const & hash_a, std::chrono::steady_clock::time_point origination) { auto cached (node.store.unchecked_get (transaction_a, hash_a)); for (auto i (cached.begin ()), n (cached.end ()); i != n; ++i) { node.store.unchecked_del (transaction_a, nano::unchecked_key (hash_a, (*i)->hash ())); - add (*i, std::chrono::steady_clock::time_point ()); + add (*i, origination); } std::lock_guard lock (node.gap_cache.mutex); node.gap_cache.blocks.get<1> ().erase (hash_a); diff --git a/nano/node/node.hpp b/nano/node/node.hpp index e1528627e..2b205401b 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -428,7 +428,7 @@ public: nano::process_return process_one (nano::transaction const &, std::shared_ptr, std::chrono::steady_clock::time_point = std::chrono::steady_clock::now (), bool = false); private: - void queue_unchecked (nano::transaction const &, nano::block_hash const &); + void queue_unchecked (nano::transaction const &, nano::block_hash const &, std::chrono::steady_clock::time_point = std::chrono::steady_clock::time_point ()); void verify_state_blocks (std::unique_lock &, size_t = std::numeric_limits::max ()); void process_batch (std::unique_lock &); bool stopped;