From e6b3912927a1134f366ed5db2502eef3823d06d4 Mon Sep 17 00:00:00 2001 From: cryptocode Date: Wed, 15 May 2019 18:44:51 +0200 Subject: [PATCH] Fix race when notifying bootstrap initiator listeners (#1983) --- nano/node/bootstrap.cpp | 5 +++-- nano/node/bootstrap.hpp | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/nano/node/bootstrap.cpp b/nano/node/bootstrap.cpp index b4a1c7bd8..27be5ff3d 100644 --- a/nano/node/bootstrap.cpp +++ b/nano/node/bootstrap.cpp @@ -1748,7 +1748,7 @@ void nano::bootstrap_initiator::run_bootstrap () void nano::bootstrap_initiator::add_observer (std::function const & observer_a) { - std::lock_guard lock (mutex); + std::lock_guard lock (observers_mutex); observers.push_back (observer_a); } @@ -1778,6 +1778,7 @@ void nano::bootstrap_initiator::stop () void nano::bootstrap_initiator::notify_listeners (bool in_progress_a) { + std::lock_guard lock (observers_mutex); for (auto & i : observers) { i (in_progress_a); @@ -1791,7 +1792,7 @@ std::unique_ptr collect_seq_con_info (bootstrap_initiato size_t count = 0; size_t cache_count = 0; { - std::lock_guard guard (bootstrap_initiator.mutex); + std::lock_guard guard (bootstrap_initiator.observers_mutex); count = bootstrap_initiator.observers.size (); } { diff --git a/nano/node/bootstrap.hpp b/nano/node/bootstrap.hpp index 453638d31..535220941 100644 --- a/nano/node/bootstrap.hpp +++ b/nano/node/bootstrap.hpp @@ -254,6 +254,7 @@ private: bool stopped; std::mutex mutex; std::condition_variable condition; + std::mutex observers_mutex; std::vector> observers; boost::thread thread;