From 33e413f6b77b58d2387370134e5ba844baedd8c9 Mon Sep 17 00:00:00 2001 From: Doodle <13706157+critical27@users.noreply.github.com> Date: Tue, 4 Jul 2023 17:13:52 +0800 Subject: [PATCH] Fix drainer can't be stopped or crashed while stopping (#2894) * fix stop crashed * fix can't exit --- src/drainer/DrainerServer.cpp | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/drainer/DrainerServer.cpp b/src/drainer/DrainerServer.cpp index 176caba4f14..c983550488d 100644 --- a/src/drainer/DrainerServer.cpp +++ b/src/drainer/DrainerServer.cpp @@ -123,9 +123,11 @@ bool DrainerServer::start() { } void DrainerServer::waitUntilStop() { - std::unique_lock lkStop(muStop_); - while (drainerSvcStatus_ == STATUS_RUNNING) { - cvStop_.wait(lkStop); + { + std::unique_lock lkStop(muStop_); + while (drainerSvcStatus_ == STATUS_RUNNING) { + cvStop_.wait(lkStop); + } } this->stop(); @@ -157,14 +159,16 @@ void DrainerServer::stop() { metaClient_->stop(); } - // File operations are not allowed when exiting - std::lock_guard lrk(env_->recvLogMutex_); - std::lock_guard slk(env_->sendLogMutex_); - for (auto& fd : env_->recvLogIdFd_) { - close(fd.second); - } - for (auto& fd : env_->sendLogIdFd_) { - close(fd.second); + if (env_) { + // File operations are not allowed when exiting + std::lock_guard lrk(env_->recvLogMutex_); + std::lock_guard slk(env_->sendLogMutex_); + for (auto& fd : env_->recvLogIdFd_) { + close(fd.second); + } + for (auto& fd : env_->sendLogIdFd_) { + close(fd.second); + } } }