From 109ba614bedefc3817a036bd02134cc6ef82ed2a Mon Sep 17 00:00:00 2001 From: landerlyoung Date: Wed, 21 Apr 2021 19:53:14 +0800 Subject: [PATCH] fix multi thread issue on MessageQueue::awaitTermination --- src/utils/MessageQueue.cc | 5 +---- src/utils/MessageQueue.h | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/utils/MessageQueue.cc b/src/utils/MessageQueue.cc index 0e7f1e19..af7c6012 100644 --- a/src/utils/MessageQueue.cc +++ b/src/utils/MessageQueue.cc @@ -45,10 +45,7 @@ class LoopQueueGuard { q.erase(queue_); } - { - std::unique_lock lk(queue_->queueMutex_); - queue_->workerCount_--; - } + queue_->workerCount_--; queue_->workerQuitCondition_.notify_all(); } diff --git a/src/utils/MessageQueue.h b/src/utils/MessageQueue.h index 02ec9e53..5569a1a9 100644 --- a/src/utils/MessageQueue.h +++ b/src/utils/MessageQueue.h @@ -223,7 +223,7 @@ class MessageQueue { std::condition_variable queueNotFullCondition_; std::deque queue_; std::atomic_int32_t messageIdCounter_; - size_t workerCount_; + std::atomic_uint32_t workerCount_; std::condition_variable workerQuitCondition_; std::shared_ptr supervisor_;