Protecting adding an observer under the observer mutex.
This commit is contained in:
parent
821754cd7b
commit
ce9203e17d
3 changed files with 11 additions and 3 deletions
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
{
|
||||
|
|
|
@ -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] ()
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue