From 8f1a54aa19aa4ce7a7774004316020acce428b74 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:27:33 +0200 Subject: [PATCH 1/7] clarification --- osal/FreeRTOS/QueueMapManager.h | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.h b/osal/FreeRTOS/QueueMapManager.h index 07ca8b9e..e86fe17b 100644 --- a/osal/FreeRTOS/QueueMapManager.h +++ b/osal/FreeRTOS/QueueMapManager.h @@ -39,7 +39,8 @@ private: QueueMapManager(); ~QueueMapManager(); - uint32_t queueCounter = 0; + // Start at 1 because 0 might be the NO_QUEUE value + uint32_t queueCounter = 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From f6d1b8981cb6a09b3c8ef6d59641060d03eee23e Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:33:55 +0200 Subject: [PATCH 2/7] additional safety by check against NO_QUEUE --- osal/FreeRTOS/QueueMapManager.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 51cfe11d..7d0873b9 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -18,6 +18,10 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueueId_t* id) { MutexGuard lock(mapLock); uint32_t currentId = queueCounter++; + if(currentId == MessageQueueIF::NO_QUEUE) { + // Skip the NO_QUEUE value + queueCounter++; + } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { #if FSFW_CPP_OSTREAM_ENABLED == 1 From 5f0a3f3baaa1a05f48e641db564d87c5d224a4b3 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:34:38 +0200 Subject: [PATCH 3/7] using current ID --- osal/FreeRTOS/QueueMapManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 7d0873b9..e60b5689 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -20,7 +20,7 @@ ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueue uint32_t currentId = queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - queueCounter++; + currentId++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { From df1d5e50054d53d65effd5413f54f8cfb78d3ebe Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 14 Jul 2021 10:35:37 +0200 Subject: [PATCH 4/7] this is the correct implementation --- osal/FreeRTOS/QueueMapManager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index e60b5689..8e8b0c3e 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -20,7 +20,7 @@ ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueue uint32_t currentId = queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId++; + currentId = queueCounter++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { From 0b45e5c89a25e0f0222ae7c5a20d5839b80efff7 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:40:32 +0200 Subject: [PATCH 5/7] fix --- osal/host/QueueMapManager.cpp | 4 ++++ osal/host/QueueMapManager.h | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/osal/host/QueueMapManager.cpp b/osal/host/QueueMapManager.cpp index 879bc36d..cea79f7b 100644 --- a/osal/host/QueueMapManager.cpp +++ b/osal/host/QueueMapManager.cpp @@ -25,6 +25,10 @@ ReturnValue_t QueueMapManager::addMessageQueue( MessageQueueIF* queueToInsert, MessageQueueId_t* id) { MutexGuard lock(mapLock); uint32_t currentId = queueCounter++; + if(currentId == MessageQueueIF::NO_QUEUE) { + // Skip the NO_QUEUE value + currentId = queueCounter++; + } auto returnPair = queueMap.emplace(currentId, queueToInsert); if(not returnPair.second) { /* This should never happen for the atomic variable. */ diff --git a/osal/host/QueueMapManager.h b/osal/host/QueueMapManager.h index e274bed2..c4e0fcdf 100644 --- a/osal/host/QueueMapManager.h +++ b/osal/host/QueueMapManager.h @@ -41,7 +41,8 @@ private: QueueMapManager(); ~QueueMapManager(); - uint32_t queueCounter = 0; + // Start at 1 because 0 might be the NO_QUEUE value + uint32_t queueCounter = 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From e93230d0efae8cc2045299346406ff6026f27fcd Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:47:33 +0200 Subject: [PATCH 6/7] update init value --- osal/FreeRTOS/QueueMapManager.h | 3 +-- osal/host/QueueMapManager.h | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/osal/FreeRTOS/QueueMapManager.h b/osal/FreeRTOS/QueueMapManager.h index e86fe17b..032fb2ba 100644 --- a/osal/FreeRTOS/QueueMapManager.h +++ b/osal/FreeRTOS/QueueMapManager.h @@ -39,8 +39,7 @@ private: QueueMapManager(); ~QueueMapManager(); - // Start at 1 because 0 might be the NO_QUEUE value - uint32_t queueCounter = 1; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; diff --git a/osal/host/QueueMapManager.h b/osal/host/QueueMapManager.h index c4e0fcdf..2dd2a01d 100644 --- a/osal/host/QueueMapManager.h +++ b/osal/host/QueueMapManager.h @@ -41,8 +41,7 @@ private: QueueMapManager(); ~QueueMapManager(); - // Start at 1 because 0 might be the NO_QUEUE value - uint32_t queueCounter = 1; + uint32_t queueCounter = MessageQueueIF::NO_QUEUE + 1; MutexIF* mapLock; QueueMap queueMap; static QueueMapManager* mqManagerInstance; From baf3d4da477a07ee42a0a537721e4fd35bbd11b8 Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Mon, 19 Jul 2021 14:57:10 +0200 Subject: [PATCH 7/7] better form --- osal/FreeRTOS/QueueMapManager.cpp | 6 ++++-- osal/host/QueueMapManager.cpp | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/osal/FreeRTOS/QueueMapManager.cpp b/osal/FreeRTOS/QueueMapManager.cpp index 8e8b0c3e..b58fd4fe 100644 --- a/osal/FreeRTOS/QueueMapManager.cpp +++ b/osal/FreeRTOS/QueueMapManager.cpp @@ -17,10 +17,12 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue(QueueHandle_t queue, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId = queueCounter++; + currentId = queueCounter; + queueCounter++; } auto returnPair = queueMap.emplace(currentId, queue); if(not returnPair.second) { diff --git a/osal/host/QueueMapManager.cpp b/osal/host/QueueMapManager.cpp index cea79f7b..5117d551 100644 --- a/osal/host/QueueMapManager.cpp +++ b/osal/host/QueueMapManager.cpp @@ -24,10 +24,12 @@ QueueMapManager* QueueMapManager::instance() { ReturnValue_t QueueMapManager::addMessageQueue( MessageQueueIF* queueToInsert, MessageQueueId_t* id) { MutexGuard lock(mapLock); - uint32_t currentId = queueCounter++; + uint32_t currentId = queueCounter; + queueCounter++; if(currentId == MessageQueueIF::NO_QUEUE) { // Skip the NO_QUEUE value - currentId = queueCounter++; + currentId = queueCounter; + queueCounter++; } auto returnPair = queueMap.emplace(currentId, queueToInsert); if(not returnPair.second) {