Commit 6e4fb0a7 authored by Matthias Vallentin's avatar Matthias Vallentin

Relax requirements about sequential processing.

The concurrent nature of the profiler callbacks from multiple threads
can cause a scenario where a job measurement arrives after the job
has already been removed. In this (rare) case we just ignore the
sample.
parent 1a58d407
...@@ -216,7 +216,7 @@ class profiled_coordinator : public coordinator<Policy> { ...@@ -216,7 +216,7 @@ class profiled_coordinator : public coordinator<Policy> {
void remove_job(actor_id job) { void remove_job(actor_id job) {
std::lock_guard<std::mutex> job_guard{m_job_mtx}; std::lock_guard<std::mutex> job_guard{m_job_mtx};
auto j = m_jobs.find(job); auto j = m_jobs.find(job);
CAF_REQUIRE(j != m_jobs.end()); if (j != m_jobs.end()) {
if (job != 0) { if (job != 0) {
auto now = clock_type::now().time_since_epoch(); auto now = clock_type::now().time_since_epoch();
auto wallclock = m_system_start + (now - m_clock_start); auto wallclock = m_system_start + (now - m_clock_start);
...@@ -225,6 +225,7 @@ class profiled_coordinator : public coordinator<Policy> { ...@@ -225,6 +225,7 @@ class profiled_coordinator : public coordinator<Policy> {
} }
m_jobs.erase(j); m_jobs.erase(j);
} }
}
template <class Time, class Label> template <class Time, class Label>
void record(Time t, Label label, size_t id, measurement const& m) { void record(Time t, Label label, size_t id, measurement const& m) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment