Skip to content

Commit 9e3a623

Browse files
committed
sim/queue: support uxQueueMessagesWaiting for SysTask state refactor
PR InfiniTimeOrg/InfiniTime#2109 refactors the `SystemTask.h` state machine to prevent `GoingToSleep` race conditions (and similar state transistions). In doing so the function `uxQueueMessagesWaiting()` from NRF SDK was used. Implement this newly used function.
1 parent 5f076b8 commit 9e3a623

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

sim/queue.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,17 @@ BaseType_t xQueueReceive(QueueHandle_t xQueue, void * const pvBuffer, TickType_t
4747
pxQueue->queue.erase(pxQueue->queue.begin());
4848
return true;
4949
}
50+
51+
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue)
52+
{
53+
UBaseType_t uxReturn;
54+
SDL_assert(xQueue);
55+
Queue_t* pxQueue = ( Queue_t * ) xQueue;
56+
// taskENTER_CRITICAL();
57+
{
58+
std::lock_guard<std::mutex> guard(pxQueue->mutex);
59+
uxReturn = static_cast<UBaseType_t>(pxQueue->queue.size());
60+
}
61+
// taskEXIT_CRITICAL();
62+
return uxReturn;
63+
}

sim/queue.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ QueueHandle_t xQueueCreate(const UBaseType_t uxQueueLength, const UBaseType_t ux
2727
BaseType_t xQueueSend(QueueHandle_t xQueue, const void * const pvItemToQueue, TickType_t xTicksToWait);
2828
BaseType_t xQueueSendFromISR(QueueHandle_t xQueue, const void * const pvItemToQueue, BaseType_t *xHigherPriorityTaskWoken);
2929
BaseType_t xQueueReceive(QueueHandle_t xQueue, void * const pvBuffer, TickType_t xTicksToWait );
30+
UBaseType_t uxQueueMessagesWaiting(const QueueHandle_t xQueue);

0 commit comments

Comments
 (0)