From 6542a7851f57edcbec2925d0fe812fb404f437ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Piotr=20Wo=CC=81jcik?= <3044353+pwojcikdev@users.noreply.github.com> Date: Thu, 17 Oct 2024 17:30:05 +0200 Subject: [PATCH] Fix confirming set contains check --- nano/node/confirming_set.cpp | 13 ++++++++++++- nano/node/confirming_set.hpp | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nano/node/confirming_set.cpp b/nano/node/confirming_set.cpp index d669153b..40216e44 100644 --- a/nano/node/confirming_set.cpp +++ b/nano/node/confirming_set.cpp @@ -76,7 +76,7 @@ void nano::confirming_set::stop () bool nano::confirming_set::contains (nano::block_hash const & hash) const { std::lock_guard lock{ mutex }; - return set.get ().contains (hash); + return set.get ().contains (hash) || current.contains (hash); } std::size_t nano::confirming_set::size () const @@ -130,6 +130,13 @@ void nano::confirming_set::run_batch (std::unique_lock & lock) auto batch = next_batch (config.batch_size); + // Keep track of the blocks we're currently cementing, so that the .contains (...) check is accurate + debug_assert (current.empty ()); + for (auto const & [hash, election] : batch) + { + current.insert (hash); + } + lock.unlock (); auto notify = [this, &cemented] () { @@ -218,6 +225,10 @@ void nano::confirming_set::run_batch (std::unique_lock & lock) release_assert (cemented.empty ()); already_cemented.notify (already); + + lock.lock (); + current.clear (); + lock.unlock (); } nano::container_info nano::confirming_set::container_info () const diff --git a/nano/node/confirming_set.hpp b/nano/node/confirming_set.hpp index 7085b5ba..71214e56 100644 --- a/nano/node/confirming_set.hpp +++ b/nano/node/confirming_set.hpp @@ -102,6 +102,7 @@ private: // clang-format on ordered_entries set; + std::unordered_set current; nano::thread_pool notification_workers;