From a1e911341b4bdd8f51ce85a6ffb28b8ce14aa8cb Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 5 Jan 2015 20:21:43 -0600 Subject: [PATCH] Extract synchronize function to send one at a time. --- rai/core/core.cpp | 50 +++++++++++++++++++++++++++++++---------------- rai/core/core.hpp | 2 ++ 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/rai/core/core.cpp b/rai/core/core.cpp index 7f7514fd..fef08707 100644 --- a/rai/core/core.cpp +++ b/rai/core/core.cpp @@ -3446,29 +3446,45 @@ bool rai::block_synchronization::add_dependency (rai::block const & block_a) return visitor.result; } +bool rai::block_synchronization::fill_dependencies () +{ + auto result (false); + auto done (false); + while (!result && !done) + { + auto block (retrieve (blocks.top ())); + if (block != nullptr) + { + done = add_dependency (*block); + } + else + { + result = true; + } + } + return result; +} + +bool rai::block_synchronization::synchronize_one () +{ + auto result (fill_dependencies ()); + if (!result) + { + auto block (retrieve (blocks.top ())); + assert (block != nullptr); + target (*block); + blocks.pop (); + } + return result; +} + bool rai::block_synchronization::synchronize (rai::block_hash const & hash_a) { auto result (false); blocks.push (hash_a); while (!result && !blocks.empty ()) { - auto block (retrieve (blocks.top ())); - if (block != nullptr) - { - if (add_dependency (*block)) - { - target (*block); - blocks.pop (); - } - else - { - // Dependency was added to 'blocks' - } - } - else - { - result = true; - } + result = synchronize_one (); } return result; } diff --git a/rai/core/core.hpp b/rai/core/core.hpp index 01622a04..dcb3f140 100644 --- a/rai/core/core.hpp +++ b/rai/core/core.hpp @@ -418,6 +418,8 @@ public: virtual std::unique_ptr retrieve (rai::block_hash const &) = 0; // return true if all dependencies are synchronized bool add_dependency (rai::block const &); + bool fill_dependencies (); + bool synchronize_one (); bool synchronize (rai::block_hash const &); std::stack blocks; std::unordered_set sent;