diff options
Diffstat (limited to 'src/mongo/db/s/balancer/balancer.cpp')
-rw-r--r-- | src/mongo/db/s/balancer/balancer.cpp | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/src/mongo/db/s/balancer/balancer.cpp b/src/mongo/db/s/balancer/balancer.cpp index 9710eae64c2..00923c6732a 100644 --- a/src/mongo/db/s/balancer/balancer.cpp +++ b/src/mongo/db/s/balancer/balancer.cpp @@ -293,11 +293,11 @@ void Balancer::initiateBalancer(OperationContext* opCtx) { void Balancer::interruptBalancer() { stdx::lock_guard<Latch> scopedLock(_mutex); - if (_state != kRunning) + if (_state != kRunning) { return; + } _state = kStopping; - _thread.detach(); // Interrupt the balancer thread if it has been started. We are guaranteed that the operation // context of that thread is still alive, because we hold the balancer mutex. @@ -312,8 +312,10 @@ void Balancer::interruptBalancer() { void Balancer::waitForBalancerToStop() { stdx::unique_lock<Latch> scopedLock(_mutex); - _joinCond.wait(scopedLock, [this] { return _state == kStopped; }); + if (_thread.joinable()) { + _thread.join(); + } } void Balancer::joinCurrentRound(OperationContext* opCtx) { @@ -612,12 +614,12 @@ void Balancer::_consumeActionStreamLoop() { void Balancer::_mainThread() { ON_BLOCK_EXIT([this] { - stdx::lock_guard<Latch> scopedLock(_mutex); - - _state = kStopped; + { + stdx::lock_guard<Latch> scopedLock(_mutex); + _state = kStopped; + LOGV2_DEBUG(21855, 1, "Balancer thread terminated"); + } _joinCond.notify_all(); - - LOGV2_DEBUG(21855, 1, "Balancer thread terminated"); }); Client::initThread("Balancer"); |