diff --git a/rai/node/bootstrap.cpp b/rai/node/bootstrap.cpp index 79286531..adc42117 100644 --- a/rai/node/bootstrap.cpp +++ b/rai/node/bootstrap.cpp @@ -813,8 +813,15 @@ void rai::bootstrap_initiator::initiate (rai::endpoint const & endpoint_a) processor->run (rai::tcp_endpoint (endpoint_a.address (), endpoint_a.port ())); } +void rai::bootstrap_initiator::add_observer (std::function const & observer_a) +{ + std::lock_guard lock (mutex); + observers.push_back (observer_a); +} + void rai::bootstrap_initiator::notify_listeners () { + assert (!mutex.try_lock()); for (auto & i: observers) { i (in_progress); diff --git a/rai/node/bootstrap.hpp b/rai/node/bootstrap.hpp index 675509b2..628e3c7c 100644 --- a/rai/node/bootstrap.hpp +++ b/rai/node/bootstrap.hpp @@ -106,7 +106,6 @@ public: std::shared_ptr connection; rai::push_synchronization synchronization; }; - class bootstrap_initiator { public: @@ -116,11 +115,13 @@ public: void bootstrap_any (); void initiate (rai::endpoint const &); void notify_listeners (); - std::vector > observers; + void add_observer (std::function const &); std::mutex mutex; rai::node & node; bool in_progress; std::unordered_set warmed_up; +private: + std::vector > observers; }; class bootstrap_listener { diff --git a/rai/qt/qt.cpp b/rai/qt/qt.cpp index 3b98a6f4..6dfe54b5 100644 --- a/rai/qt/qt.cpp +++ b/rai/qt/qt.cpp @@ -764,7 +764,7 @@ active_status (*this) update_connected (); })); }); - node.bootstrap_initiator.observers.push_back ([this] (bool active_a) + node.bootstrap_initiator.add_observer ([this] (bool active_a) { application.postEvent (&processor, new eventloop_event ([this, active_a] () {