Commit 2c9b29c9 by Chris Kennelly

Resolve race on approx_time_ in FastClock.

InitType should hold a lock before storing to approx_time_, which is later read by the background worker. When the worker is actively running (i.e., not blocked on bg_cond_) it holds bg_mutex_. InitType is called during benchmark setup only, so any contention induced for the mutex should not have performance/accuracy consequences.
parent efb9c302
...@@ -577,6 +577,7 @@ class State::FastClock { ...@@ -577,6 +577,7 @@ class State::FastClock {
// function starts running - see UseRealTime). // function starts running - see UseRealTime).
void InitType(Type type) { void InitType(Type type) {
type_ = type; type_ = type;
mutex_lock l(&bg_mutex_);
std::atomic_store(&approx_time_, NowMicros()); std::atomic_store(&approx_time_, NowMicros());
} }
......
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