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.
diff --git a/src/benchmark.cc b/src/benchmark.cc
index 3cfbe59..f8806d5 100644
--- a/src/benchmark.cc
+++ b/src/benchmark.cc
@@ -577,6 +577,7 @@
// function starts running - see UseRealTime).
void InitType(Type type) {
type_ = type;
+ mutex_lock l(&bg_mutex_);
std::atomic_store(&approx_time_, NowMicros());
}