diff options
| -rw-r--r-- | src/TimerA2.cc | 14 | ||||
| -rw-r--r-- | src/TimerA2.h | 8 |
2 files changed, 17 insertions, 5 deletions
diff --git a/src/TimerA2.cc b/src/TimerA2.cc index 850c5355..22023253 100644 --- a/src/TimerA2.cc +++ b/src/TimerA2.cc @@ -37,15 +37,23 @@ namespace aria2 { -Timer::Timer() : tp_(Clock::now()) { reset(); } +// Add this offset to Timer::Clock::now() so that we can treat 0 value +// as special case, and normal timeout always applies. +constexpr auto OFFSET = 24_h; + +namespace { +Timer::Clock::time_point getNow() { return Timer::Clock::now() + OFFSET; } +} // namespace + +Timer::Timer() : tp_(getNow()) { reset(); } Timer::Timer(const Clock::time_point& tp) : tp_(tp) {} -void Timer::reset() { tp_ = Clock::now(); } +void Timer::reset() { tp_ = getNow(); } Timer::Clock::duration Timer::difference() const { - auto now = Clock::now(); + auto now = getNow(); if (now < tp_) { return Timer::Clock::duration(0_s); } diff --git a/src/TimerA2.h b/src/TimerA2.h index 2370dba3..baf5ef22 100644 --- a/src/TimerA2.h +++ b/src/TimerA2.h @@ -54,9 +54,13 @@ public: Timer(const Timer& time) = default; Timer(Timer&& time) = default; - template <typename duration> constexpr Timer(const duration& t) : tp_(t) {} + template <typename duration> + constexpr explicit Timer(const duration& t) + : tp_(t) + { + } - Timer(const Clock::time_point& tp); + explicit Timer(const Clock::time_point& tp); Timer& operator=(Timer&& timer) = default; Timer& operator=(const Timer& timer) = default; |
