Protecting adding an observer under the observer mutex.

This commit is contained in:
clemahieu 2016-03-29 21:18:38 -05:00
commit ce9203e17d
3 changed files with 11 additions and 3 deletions

View file

@ -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 <void (bool)> const & observer_a)
{
std::lock_guard <std::mutex> lock (mutex);
observers.push_back (observer_a);
}
void rai::bootstrap_initiator::notify_listeners ()
{
assert (!mutex.try_lock());
for (auto & i: observers)
{
i (in_progress);

View file

@ -106,7 +106,6 @@ public:
std::shared_ptr <rai::frontier_req_client> 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 <std::function <void (bool)>> observers;
void add_observer (std::function <void (bool)> const &);
std::mutex mutex;
rai::node & node;
bool in_progress;
std::unordered_set <rai::endpoint> warmed_up;
private:
std::vector <std::function <void (bool)>> observers;
};
class bootstrap_listener
{

View file

@ -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] ()
{