summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Caimano <ben.caimano@mongodb.com>2019-09-19 13:38:08 +0000
committerevergreen <evergreen@mongodb.com>2019-09-19 13:38:08 +0000
commitb984ffcd911ae3210bdeb3f109d1033bad30c563 (patch)
treea54402de955e399749878c48128f1fd85729b4ea
parent7eda962b63ab11427889b13dc3fbbe6df0fd02fb (diff)
downloadmongo-b984ffcd911ae3210bdeb3f109d1033bad30c563.tar.gz
SERVER-43374 Extend BasicLockableAdaptor lifetime in waitForConditionUntil
-rw-r--r--src/mongo/util/clock_source.cpp6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/mongo/util/clock_source.cpp b/src/mongo/util/clock_source.cpp
index 6f54a1bcc76..ebae9737e73 100644
--- a/src/mongo/util/clock_source.cpp
+++ b/src/mongo/util/clock_source.cpp
@@ -56,13 +56,13 @@ stdx::cv_status ClockSource::waitForConditionUntil(stdx::condition_variable& cv,
struct AlarmInfo {
Mutex controlMutex = MONGO_MAKE_LATCH("AlarmInfo::controlMutex");
- BasicLockableAdapter* waitLock;
+ boost::optional<BasicLockableAdapter> waitLock;
stdx::condition_variable* waitCV;
stdx::cv_status cvWaitResult = stdx::cv_status::no_timeout;
};
auto alarmInfo = std::make_shared<AlarmInfo>();
alarmInfo->waitCV = &cv;
- alarmInfo->waitLock = &m;
+ alarmInfo->waitLock = m;
const auto waiterThreadId = stdx::this_thread::get_id();
bool invokedAlarmInline = false;
invariant(setAlarm(deadline, [alarmInfo, waiterThreadId, &invokedAlarmInline] {
@@ -88,7 +88,7 @@ stdx::cv_status ClockSource::waitForConditionUntil(stdx::condition_variable& cv,
m.unlock();
stdx::lock_guard<Latch> controlLk(alarmInfo->controlMutex);
m.lock();
- alarmInfo->waitLock = nullptr;
+ alarmInfo->waitLock = boost::none;
alarmInfo->waitCV = nullptr;
return alarmInfo->cvWaitResult;
}