Fix race when notifying bootstrap initiator listeners (#1983)
This commit is contained in:
parent
c87dfa3c72
commit
e6b3912927
2 changed files with 4 additions and 2 deletions
|
|
@ -1748,7 +1748,7 @@ void nano::bootstrap_initiator::run_bootstrap ()
|
||||||
|
|
||||||
void nano::bootstrap_initiator::add_observer (std::function<void(bool)> const & observer_a)
|
void nano::bootstrap_initiator::add_observer (std::function<void(bool)> const & observer_a)
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> lock (mutex);
|
std::lock_guard<std::mutex> lock (observers_mutex);
|
||||||
observers.push_back (observer_a);
|
observers.push_back (observer_a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1778,6 +1778,7 @@ void nano::bootstrap_initiator::stop ()
|
||||||
|
|
||||||
void nano::bootstrap_initiator::notify_listeners (bool in_progress_a)
|
void nano::bootstrap_initiator::notify_listeners (bool in_progress_a)
|
||||||
{
|
{
|
||||||
|
std::lock_guard<std::mutex> lock (observers_mutex);
|
||||||
for (auto & i : observers)
|
for (auto & i : observers)
|
||||||
{
|
{
|
||||||
i (in_progress_a);
|
i (in_progress_a);
|
||||||
|
|
@ -1791,7 +1792,7 @@ std::unique_ptr<seq_con_info_component> collect_seq_con_info (bootstrap_initiato
|
||||||
size_t count = 0;
|
size_t count = 0;
|
||||||
size_t cache_count = 0;
|
size_t cache_count = 0;
|
||||||
{
|
{
|
||||||
std::lock_guard<std::mutex> guard (bootstrap_initiator.mutex);
|
std::lock_guard<std::mutex> guard (bootstrap_initiator.observers_mutex);
|
||||||
count = bootstrap_initiator.observers.size ();
|
count = bootstrap_initiator.observers.size ();
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -254,6 +254,7 @@ private:
|
||||||
bool stopped;
|
bool stopped;
|
||||||
std::mutex mutex;
|
std::mutex mutex;
|
||||||
std::condition_variable condition;
|
std::condition_variable condition;
|
||||||
|
std::mutex observers_mutex;
|
||||||
std::vector<std::function<void(bool)>> observers;
|
std::vector<std::function<void(bool)>> observers;
|
||||||
boost::thread thread;
|
boost::thread thread;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue