mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-04-22 14:31:59 -04:00
Add some assertions and coverage exceptions to queue.c (#273)
* Add an LCOV_BRANCH exception for the check that sizeof( StaticQueue_t ) == sizeof( Queue_t ) * Add LCOV_BRANCH coverage exception for a configASSERT on pxQueueSetContainer with a condition that is unreachable. * Add configASSERTs to alert when invalid parameters are passed into Queue Registry related functions. * Assert that the semaphore handle passed into xQueueGetMutexHolder is not NULL. * Correct some typos in queue.c * Update lexicon.txt
This commit is contained in:
parent
de19eeb7d3
commit
18d4ba9c07
6
.github/lexicon.txt
vendored
6
.github/lexicon.txt
vendored
|
@ -1529,6 +1529,7 @@ prvinitialisenewstreambuffer
|
||||||
prvinitialisenewtimer
|
prvinitialisenewtimer
|
||||||
prvinsertblockintofreelist
|
prvinsertblockintofreelist
|
||||||
prvlockqueue
|
prvlockqueue
|
||||||
|
prvnotifyqueuesetcontainer
|
||||||
prvportmalloc
|
prvportmalloc
|
||||||
prvportresetpic
|
prvportresetpic
|
||||||
prvprocesssimulatedinterrupts
|
prvprocesssimulatedinterrupts
|
||||||
|
@ -1631,7 +1632,6 @@ pvyieldevent
|
||||||
pwdtc
|
pwdtc
|
||||||
pwm
|
pwm
|
||||||
pwmc
|
pwmc
|
||||||
pxtaskcode
|
|
||||||
pxblock
|
pxblock
|
||||||
pxblocktoinsert
|
pxblocktoinsert
|
||||||
pxcallbackfunction
|
pxcallbackfunction
|
||||||
|
@ -1688,6 +1688,7 @@ pxprevious
|
||||||
pxpreviouswaketime
|
pxpreviouswaketime
|
||||||
pxqueue
|
pxqueue
|
||||||
pxqueuebuffer
|
pxqueuebuffer
|
||||||
|
pxqueuesetcontainer
|
||||||
pxramstack
|
pxramstack
|
||||||
pxreadycoroutinelists
|
pxreadycoroutinelists
|
||||||
pxreadytaskslists
|
pxreadytaskslists
|
||||||
|
@ -1707,6 +1708,7 @@ pxstreambuffercreatestatic
|
||||||
pxtagvalue
|
pxtagvalue
|
||||||
pxtask
|
pxtask
|
||||||
pxtaskbuffer
|
pxtaskbuffer
|
||||||
|
pxtaskcode
|
||||||
pxtaskdefinition
|
pxtaskdefinition
|
||||||
pxtaskstatus
|
pxtaskstatus
|
||||||
pxtaskstatusarray
|
pxtaskstatusarray
|
||||||
|
@ -2653,7 +2655,6 @@ wu
|
||||||
www
|
www
|
||||||
wwwfreertos
|
wwwfreertos
|
||||||
wxr
|
wxr
|
||||||
xtasktodelete
|
|
||||||
xa
|
xa
|
||||||
xaa
|
xaa
|
||||||
xaaaa
|
xaaaa
|
||||||
|
@ -3020,6 +3021,7 @@ xtaskswaitingforbits
|
||||||
xtaskswaitingtermination
|
xtaskswaitingtermination
|
||||||
xtaskswaitingtoreceive
|
xtaskswaitingtoreceive
|
||||||
xtaskswaitingtosend
|
xtaskswaitingtosend
|
||||||
|
xtasktodelete
|
||||||
xtasktonotify
|
xtasktonotify
|
||||||
xtasktoquery
|
xtasktoquery
|
||||||
xtasktoresume
|
xtasktoresume
|
||||||
|
|
24
queue.c
24
queue.c
|
@ -342,7 +342,9 @@ BaseType_t xQueueGenericReset( QueueHandle_t xQueue,
|
||||||
* variable of type StaticQueue_t or StaticSemaphore_t equals the size of
|
* variable of type StaticQueue_t or StaticSemaphore_t equals the size of
|
||||||
* the real queue and semaphore structures. */
|
* the real queue and semaphore structures. */
|
||||||
volatile size_t xSize = sizeof( StaticQueue_t );
|
volatile size_t xSize = sizeof( StaticQueue_t );
|
||||||
configASSERT( xSize == sizeof( Queue_t ) );
|
|
||||||
|
/* This assertion cannot be branch covered in unit tests */
|
||||||
|
configASSERT( xSize == sizeof( Queue_t ) ); /* LCOV_EXCL_BR_LINE */
|
||||||
( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
|
( void ) xSize; /* Keeps lint quiet when configASSERT() is not defined. */
|
||||||
}
|
}
|
||||||
#endif /* configASSERT_DEFINED */
|
#endif /* configASSERT_DEFINED */
|
||||||
|
@ -561,6 +563,8 @@ static void prvInitialiseNewQueue( const UBaseType_t uxQueueLength,
|
||||||
TaskHandle_t pxReturn;
|
TaskHandle_t pxReturn;
|
||||||
Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;
|
Queue_t * const pxSemaphore = ( Queue_t * ) xSemaphore;
|
||||||
|
|
||||||
|
configASSERT( xSemaphore );
|
||||||
|
|
||||||
/* This function is called by xSemaphoreGetMutexHolder(), and should not
|
/* This function is called by xSemaphoreGetMutexHolder(), and should not
|
||||||
* be called directly. Note: This is a good way of determining if the
|
* be called directly. Note: This is a good way of determining if the
|
||||||
* calling task is the mutex holder, but not a good way of determining the
|
* calling task is the mutex holder, but not a good way of determining the
|
||||||
|
@ -947,12 +951,12 @@ BaseType_t xQueueGenericSend( QueueHandle_t xQueue,
|
||||||
* event list. It is possible that interrupts occurring now
|
* event list. It is possible that interrupts occurring now
|
||||||
* remove this task from the event list again - but as the
|
* remove this task from the event list again - but as the
|
||||||
* scheduler is suspended the task will go onto the pending
|
* scheduler is suspended the task will go onto the pending
|
||||||
* ready last instead of the actual ready list. */
|
* ready list instead of the actual ready list. */
|
||||||
prvUnlockQueue( pxQueue );
|
prvUnlockQueue( pxQueue );
|
||||||
|
|
||||||
/* Resuming the scheduler will move tasks from the pending
|
/* Resuming the scheduler will move tasks from the pending
|
||||||
* ready list into the ready list - so it is feasible that this
|
* ready list into the ready list - so it is feasible that this
|
||||||
* task is already in a ready list before it yields - in which
|
* task is already in the ready list before it yields - in which
|
||||||
* case the yield will not cause a context switch unless there
|
* case the yield will not cause a context switch unless there
|
||||||
* is also a higher priority task in the pending ready list. */
|
* is also a higher priority task in the pending ready list. */
|
||||||
if( xTaskResumeAll() == pdFALSE )
|
if( xTaskResumeAll() == pdFALSE )
|
||||||
|
@ -1774,7 +1778,7 @@ BaseType_t xQueuePeek( QueueHandle_t xQueue,
|
||||||
taskEXIT_CRITICAL();
|
taskEXIT_CRITICAL();
|
||||||
|
|
||||||
/* Interrupts and other tasks can send to and receive from the queue
|
/* Interrupts and other tasks can send to and receive from the queue
|
||||||
* now the critical section has been exited. */
|
* now that the critical section has been exited. */
|
||||||
|
|
||||||
vTaskSuspendAll();
|
vTaskSuspendAll();
|
||||||
prvLockQueue( pxQueue );
|
prvLockQueue( pxQueue );
|
||||||
|
@ -2723,6 +2727,9 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
||||||
{
|
{
|
||||||
UBaseType_t ux;
|
UBaseType_t ux;
|
||||||
|
|
||||||
|
configASSERT( xQueue );
|
||||||
|
configASSERT( pcQueueName );
|
||||||
|
|
||||||
/* See if there is an empty space in the registry. A NULL name denotes
|
/* See if there is an empty space in the registry. A NULL name denotes
|
||||||
* a free slot. */
|
* a free slot. */
|
||||||
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
||||||
|
@ -2753,6 +2760,8 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
||||||
UBaseType_t ux;
|
UBaseType_t ux;
|
||||||
const char * pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
const char * pcReturn = NULL; /*lint !e971 Unqualified char types are allowed for strings and single characters only. */
|
||||||
|
|
||||||
|
configASSERT( xQueue );
|
||||||
|
|
||||||
/* Note there is nothing here to protect against another task adding or
|
/* Note there is nothing here to protect against another task adding or
|
||||||
* removing entries from the registry while it is being searched. */
|
* removing entries from the registry while it is being searched. */
|
||||||
|
|
||||||
|
@ -2781,6 +2790,8 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
||||||
{
|
{
|
||||||
UBaseType_t ux;
|
UBaseType_t ux;
|
||||||
|
|
||||||
|
configASSERT( xQueue );
|
||||||
|
|
||||||
/* See if the handle of the queue being unregistered in actually in the
|
/* See if the handle of the queue being unregistered in actually in the
|
||||||
* registry. */
|
* registry. */
|
||||||
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
for( ux = ( UBaseType_t ) 0U; ux < ( UBaseType_t ) configQUEUE_REGISTRY_SIZE; ux++ )
|
||||||
|
@ -2967,7 +2978,10 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
||||||
|
|
||||||
/* This function must be called form a critical section. */
|
/* This function must be called form a critical section. */
|
||||||
|
|
||||||
configASSERT( pxQueueSetContainer );
|
/* The following line is not reachable in unit tests because every call
|
||||||
|
* to prvNotifyQueueSetContainer is preceded by a check that
|
||||||
|
* pxQueueSetContainer != NULL */
|
||||||
|
configASSERT( pxQueueSetContainer ); /* LCOV_EXCL_BR_LINE */
|
||||||
configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength );
|
configASSERT( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength );
|
||||||
|
|
||||||
if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength )
|
if( pxQueueSetContainer->uxMessagesWaiting < pxQueueSetContainer->uxLength )
|
||||||
|
|
Loading…
Reference in a new issue