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