diff options
Diffstat (limited to 'staging_vespalib/src/tests/metrics/mock_tick.cpp')
-rw-r--r-- | staging_vespalib/src/tests/metrics/mock_tick.cpp | 53 |
1 files changed, 30 insertions, 23 deletions
diff --git a/staging_vespalib/src/tests/metrics/mock_tick.cpp b/staging_vespalib/src/tests/metrics/mock_tick.cpp index e78b7c4644f..2178b5364e9 100644 --- a/staging_vespalib/src/tests/metrics/mock_tick.cpp +++ b/staging_vespalib/src/tests/metrics/mock_tick.cpp @@ -3,43 +3,49 @@ namespace vespalib::metrics { -const std::chrono::seconds oneSec{1}; - TimeStamp MockTick::next(TimeStamp prev) { std::unique_lock<std::mutex> locker(_lock); _prevValue = prev; - while (_runFlag) { - if (_provided) { - _blocked.store(false); - _provided.store(false); - return _nextValue; - } - _blocked.store(true); - _blockedCond.notify_all(); - auto r = _providedCond.wait_for(locker, oneSec); - (void)r; + _blocked = true; + _blockedCond.notify_all(); + while (_runFlag && !_provided) { + _providedCond.wait(locker); + } + _blocked = false; + if (_provided) { + _provided = false; + return _nextValue; + } else { + // killed + return TimeStamp(0); } - return TimeStamp(0); } void MockTick::kill() { std::unique_lock<std::mutex> locker(_lock); - _runFlag.store(false); + _runFlag = false; _blockedCond.notify_all(); _providedCond.notify_all(); } +bool +MockTick::alive() +{ + std::unique_lock<std::mutex> locker(_lock); + return _runFlag; +} + void MockTick::provide(TimeStamp value) { std::unique_lock<std::mutex> locker(_lock); _nextValue = value; - _blocked.store(false); - _provided.store(true); + _blocked = false; + _provided = true; _providedCond.notify_all(); } @@ -47,14 +53,15 @@ TimeStamp MockTick::waitUntilBlocked() { std::unique_lock<std::mutex> locker(_lock); - while (_runFlag) { - if (_blocked) { - return _prevValue; - } - auto r = _blockedCond.wait_for(locker, oneSec); - (void)r; + while (_runFlag && !_blocked) { + _blockedCond.wait(locker); + } + if (_blocked) { + return _prevValue; + } else { + // killed + return TimeStamp(0); } - return TimeStamp(0); } MockTick::MockTick() |