From 811e04305457108bc32d8895fd9bd274715d02fc Mon Sep 17 00:00:00 2001 From: Joel Klinghed Date: Tue, 26 Sep 2017 21:58:23 +0200 Subject: Use a modification safe observers list --- src/fake_monitor.cc | 31 ++++++++++++++++++++++--------- 1 file changed, 22 insertions(+), 9 deletions(-) (limited to 'src/fake_monitor.cc') diff --git a/src/fake_monitor.cc b/src/fake_monitor.cc index ebdc79b..b05e521 100644 --- a/src/fake_monitor.cc +++ b/src/fake_monitor.cc @@ -1,10 +1,10 @@ #include "common.hh" -#include #include #include "fake_monitor.hh" #include "looper.hh" +#include "observers.hh" namespace { @@ -35,8 +35,10 @@ public: timer_ = 0; } machines_.clear(); - for (auto* observer : observers_) { + auto observer = observers_.first(); + while (observer) { observer->state(this, SEARCHING); + observer = observers_.next(); } } @@ -74,8 +76,11 @@ public: } void add_observer(Observer* observer) override { - assert(observer); - observers_.push_back(observer); + observers_.add(observer); + } + + void remove_observer(Observer* observer) override { + observers_.remove(observer); } private: @@ -95,8 +100,10 @@ private: void fake_connect(Looper*, uint32_t) { timer_ = 0; - for (auto* observer : observers_) { + auto observer = observers_.first(); + while (observer) { observer->state(this, CONNECTED); + observer = observers_.next(); } add_machine("alice", 4); @@ -114,8 +121,10 @@ private: entry.active = 0; max_jobs_ += max_jobs; - for (auto* observer : observers_) { + auto observer = observers_.first(); + while (observer) { observer->added_machine(this, id); + observer = observers_.next(); } } @@ -137,8 +146,10 @@ private: auto job = it->second; jobs_.erase(it); machines_[job.worker].active--; - for (auto* observer : observers_) { + auto observer = observers_.first(); + while (observer) { observer->removed_job(this, job.host, job.worker); + observer = observers_.next(); } } @@ -168,8 +179,10 @@ private: void add_job(uint32_t job_id, uint32_t host, uint32_t worker) { jobs_.insert(std::make_pair(job_id, Job(host, worker))); - for (auto* observer : observers_) { + auto observer = observers_.first(); + while (observer) { observer->added_job(this, host, worker); + observer = observers_.next(); } } @@ -179,7 +192,7 @@ private: uint32_t job_id_; size_t max_jobs_; std::unordered_map machines_; - std::vector observers_; + Observers observers_; std::unordered_map jobs_; }; -- cgit v1.3