summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mongo/util/periodic_runner_impl.cpp8
1 files changed, 3 insertions, 5 deletions
diff --git a/src/mongo/util/periodic_runner_impl.cpp b/src/mongo/util/periodic_runner_impl.cpp
index aad8d19c34f..f5fb19a8a2b 100644
--- a/src/mongo/util/periodic_runner_impl.cpp
+++ b/src/mongo/util/periodic_runner_impl.cpp
@@ -101,6 +101,8 @@ PeriodicRunnerImpl::PeriodicJobImpl::PeriodicJobImpl(PeriodicJob job,
: _job(std::move(job)), _clockSource(source), _serviceContext(svc) {}
void PeriodicRunnerImpl::PeriodicJobImpl::_run() {
+ stdx::lock_guard<stdx::mutex> lk(_mutex);
+ invariant(_execStatus == PeriodicJobImpl::ExecutionStatus::NOT_SCHEDULED);
_thread = stdx::thread([this] {
Client::initThread(_job.name, _serviceContext, nullptr);
while (true) {
@@ -125,14 +127,10 @@ void PeriodicRunnerImpl::PeriodicJobImpl::_run() {
}
}
});
+ _execStatus = PeriodicJobImpl::ExecutionStatus::RUNNING;
}
void PeriodicRunnerImpl::PeriodicJobImpl::start() {
- {
- stdx::lock_guard<stdx::mutex> lk(_mutex);
- invariant(_execStatus == PeriodicJobImpl::ExecutionStatus::NOT_SCHEDULED);
- _execStatus = PeriodicJobImpl::ExecutionStatus::RUNNING;
- }
_run();
}