From e154086264b2e86df0ba0346c30896a8bc206804 Mon Sep 17 00:00:00 2001 From: Federico Terraneo <fede.tft@miosix.org> Date: Thu, 6 Jun 2024 15:26:06 +0200 Subject: [PATCH] Prevent deadlock if list throws bad_alloc, fix race condition in len --- src/shared/utils/collections/SyncQueue.h | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/shared/utils/collections/SyncQueue.h b/src/shared/utils/collections/SyncQueue.h index 5f340bba6..8b83e6269 100644 --- a/src/shared/utils/collections/SyncQueue.h +++ b/src/shared/utils/collections/SyncQueue.h @@ -49,21 +49,19 @@ private: template <typename T> void SynchronizedQueue<T>::put(const T& data) { - mMutex.lock(); + miosix::Lock<miosix::Mutex> l(mMutex); queue.push_back(data); mCv.signal(); - mMutex.unlock(); } template <typename T> T SynchronizedQueue<T>::get() { - mMutex.lock(); + miosix::Lock<miosix::Mutex> l(mMutex); while (queue.empty()) - mCv.wait(mMutex); + mCv.wait(l); T result = queue.front(); queue.pop_front(); - mMutex.unlock(); return result; } @@ -71,6 +69,7 @@ T SynchronizedQueue<T>::get() template <typename T> int SynchronizedQueue<T>::len() { + miosix::Lock<miosix::Mutex> l(mMutex); return queue.size(); } -- GitLab