diff options
author | Paolo Polato <paolo.polato@mongodb.com> | 2022-06-22 07:48:24 +0000 |
---|---|---|
committer | Evergreen Agent <no-reply@evergreen.mongodb.com> | 2022-06-22 08:59:17 +0000 |
commit | b987618f40153ceaeeed328fffb07991f8c6a7cf (patch) | |
tree | 07cf7e6a2ce458e561062d9b442c215255b0b2e2 | |
parent | 2dde408370d5cb709c9be976123bbc266480b38a (diff) | |
download | mongo-b987618f40153ceaeeed328fffb07991f8c6a7cf.tar.gz |
SERVER-66130 Do not detach from the balancer worker thread on config server stepdown
-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"); |