From 27de30e76164cc1735c255a090089f68347260a6 Mon Sep 17 00:00:00 2001 From: Povilas Kanapickas Date: Wed, 3 Nov 2021 02:58:28 +0200 Subject: [PATCH] lib/base: Use standard mutex primitives in event queue buffer --- src/lib/base/SimpleEventQueueBuffer.cpp | 16 ++++++---------- src/lib/base/SimpleEventQueueBuffer.h | 5 +++-- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/src/lib/base/SimpleEventQueueBuffer.cpp b/src/lib/base/SimpleEventQueueBuffer.cpp index 93144bb8..877572b1 100644 --- a/src/lib/base/SimpleEventQueueBuffer.cpp +++ b/src/lib/base/SimpleEventQueueBuffer.cpp @@ -28,21 +28,17 @@ class EventQueueTimer { }; SimpleEventQueueBuffer::SimpleEventQueueBuffer() { - m_queueMutex = ARCH->newMutex(); - m_queueReadyCond = ARCH->newCondVar(); m_queueReady = false; } SimpleEventQueueBuffer::~SimpleEventQueueBuffer() { - ARCH->closeCondVar(m_queueReadyCond); - ARCH->closeMutex(m_queueMutex); } void SimpleEventQueueBuffer::waitForEvent(double timeout) { - ArchMutexLock lock(m_queueMutex); + std::unique_lock lock(queue_mutex_); Stopwatch timer(true); while (!m_queueReady) { double timeLeft = timeout; @@ -52,14 +48,14 @@ SimpleEventQueueBuffer::waitForEvent(double timeout) return; } } - ARCH->waitCondVar(m_queueReadyCond, lock, timeLeft); + ARCH->wait_cond_var(queue_ready_cv_, lock, timeLeft); } } IEventQueueBuffer::Type SimpleEventQueueBuffer::getEvent(Event&, UInt32& dataID) { - ArchMutexLock lock(m_queueMutex); + std::lock_guard lock(queue_mutex_); if (!m_queueReady) { return kNone; } @@ -72,11 +68,11 @@ SimpleEventQueueBuffer::getEvent(Event&, UInt32& dataID) bool SimpleEventQueueBuffer::addEvent(UInt32 dataID) { - ArchMutexLock lock(m_queueMutex); + std::lock_guard lock(queue_mutex_); m_queue.push_front(dataID); if (!m_queueReady) { m_queueReady = true; - ARCH->broadcastCondVar(m_queueReadyCond); + queue_ready_cv_.notify_all(); } return true; } @@ -84,7 +80,7 @@ SimpleEventQueueBuffer::addEvent(UInt32 dataID) bool SimpleEventQueueBuffer::isEmpty() const { - ArchMutexLock lock(m_queueMutex); + std::lock_guard lock(queue_mutex_); return !m_queueReady; } diff --git a/src/lib/base/SimpleEventQueueBuffer.h b/src/lib/base/SimpleEventQueueBuffer.h index db6a5027..c50d0f91 100644 --- a/src/lib/base/SimpleEventQueueBuffer.h +++ b/src/lib/base/SimpleEventQueueBuffer.h @@ -21,6 +21,7 @@ #include "base/IEventQueueBuffer.h" #include "arch/IArchMultithread.h" #include "common/stddeque.h" +#include //! In-memory event queue buffer /*! @@ -44,8 +45,8 @@ public: private: typedef std::deque EventDeque; - ArchMutex m_queueMutex; - ArchCond m_queueReadyCond; + mutable std::mutex queue_mutex_; + std::condition_variable queue_ready_cv_; bool m_queueReady; EventDeque m_queue; };