summaryrefslogtreecommitdiff
path: root/src/mongo/util/clock_source.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/util/clock_source.cpp')
-rw-r--r--src/mongo/util/clock_source.cpp13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/mongo/util/clock_source.cpp b/src/mongo/util/clock_source.cpp
index d562089c27a..ec02c771294 100644
--- a/src/mongo/util/clock_source.cpp
+++ b/src/mongo/util/clock_source.cpp
@@ -30,13 +30,20 @@
#include "mongo/stdx/thread.h"
#include "mongo/util/clock_source.h"
+#include "mongo/util/waitable.h"
namespace mongo {
stdx::cv_status ClockSource::waitForConditionUntil(stdx::condition_variable& cv,
stdx::unique_lock<stdx::mutex>& m,
- Date_t deadline) {
+ Date_t deadline,
+ Waitable* waitable) {
if (_tracksSystemClock) {
- return cv.wait_until(m, deadline.toSystemTimePoint());
+ if (deadline == Date_t::max()) {
+ Waitable::wait(waitable, this, cv, m);
+ return stdx::cv_status::no_timeout;
+ }
+
+ return Waitable::wait_until(waitable, this, cv, m, deadline.toSystemTimePoint());
}
// The rest of this function only runs during testing, when the clock source is virtualized and
@@ -75,7 +82,7 @@ stdx::cv_status ClockSource::waitForConditionUntil(stdx::condition_variable& cv,
alarmInfo->waitCV->notify_all();
}));
if (!invokedAlarmInline) {
- cv.wait(m);
+ Waitable::wait(waitable, this, cv, m);
}
m.unlock();
stdx::lock_guard<stdx::mutex> controlLk(alarmInfo->controlMutex);