std::cv_status wait_until(
std::unique_lock<mutex_debug>& lock,
const std::chrono::time_point<Clock, Duration>& when) {
- timespec ts = Clock::to_timespec(when);
- return _wait_until(lock.mutex(), &ts);
+ if constexpr (Clock::is_steady) {
+ // convert from mono_clock to real_clock
+ auto real_when = ceph::real_clock::now();
+ const auto delta = when - Clock::now();
+ real_when += std::chrono::ceil<typename Clock::duration>(delta);
+ timespec ts = ceph::real_clock::to_timespec(real_when);
+ return _wait_until(lock.mutex(), &ts);
+ } else {
+ timespec ts = Clock::to_timespec(when);
+ return _wait_until(lock.mutex(), &ts);
+ }
}
template<class Rep, class Period>
std::cv_status wait_for(
if (!_opened())
_reopen_session();
- auto until = ceph::real_clock::now();
+ auto until = ceph::mono_clock::now();
until += ceph::make_timespan(timeout);
if (timeout > 0.0)
ldout(cct, 10) << "authenticate will time out at " << until << dendl;