mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-06-07 04:49:04 -04:00
Overwrite existing QueueRegistry entries when a handle is added multiple times. (#306)
Overwrite an existing entry for a given xQueue handle when vQueueAddToRegistry is called with an xQueue handle of a queue that is already in the QueueRegistry.
This commit is contained in:
parent
a31018d025
commit
a22b438e60
|
@ -1491,6 +1491,10 @@ BaseType_t xQueueGiveMutexRecursive( QueueHandle_t xMutex ) PRIVILEGED_FUNCTION;
|
||||||
* does not effect the number of queues, semaphores and mutexes that can be
|
* does not effect the number of queues, semaphores and mutexes that can be
|
||||||
* created - just the number that the registry can hold.
|
* created - just the number that the registry can hold.
|
||||||
*
|
*
|
||||||
|
* If vQueueAddToRegistry is called more than once with the same xQueue
|
||||||
|
* parameter, the registry will store the pcQueueName parameter from the
|
||||||
|
* most recent call to vQueueAddToRegistry.
|
||||||
|
*
|
||||||
* @param xQueue The handle of the queue being added to the registry. This
|
* @param xQueue The handle of the queue being added to the registry. This
|
||||||
* is the handle returned by a call to xQueueCreate(). Semaphore and mutex
|
* is the handle returned by a call to xQueueCreate(). Semaphore and mutex
|
||||||
* handles can also be passed in here.
|
* handles can also be passed in here.
|
||||||
|
|
25
queue.c
25
queue.c
|
@ -2730,24 +2730,37 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
|
||||||
configASSERT( xQueue );
|
configASSERT( xQueue );
|
||||||
configASSERT( pcQueueName );
|
configASSERT( pcQueueName );
|
||||||
|
|
||||||
|
QueueRegistryItem_t * pxEntryToWrite = NULL;
|
||||||
|
|
||||||
/* 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++ )
|
||||||
{
|
{
|
||||||
if( xQueueRegistry[ ux ].pcQueueName == NULL )
|
/* Replace an existing entry if the queue is already in the registry. */
|
||||||
|
if( xQueueRegistry[ ux ].xHandle == xQueue )
|
||||||
{
|
{
|
||||||
/* Store the information on this queue. */
|
pxEntryToWrite = &( xQueueRegistry[ ux ] );
|
||||||
xQueueRegistry[ ux ].pcQueueName = pcQueueName;
|
|
||||||
xQueueRegistry[ ux ].xHandle = xQueue;
|
|
||||||
|
|
||||||
traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* Otherwise, store in the next empty location */
|
||||||
|
else if( ( NULL == pxEntryToWrite ) && ( xQueueRegistry[ ux ].pcQueueName == NULL ) )
|
||||||
|
{
|
||||||
|
pxEntryToWrite = &( xQueueRegistry[ ux ] );
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mtCOVERAGE_TEST_MARKER();
|
mtCOVERAGE_TEST_MARKER();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( NULL != pxEntryToWrite )
|
||||||
|
{
|
||||||
|
/* Store the information on this queue. */
|
||||||
|
pxEntryToWrite->pcQueueName = pcQueueName;
|
||||||
|
pxEntryToWrite->xHandle = xQueue;
|
||||||
|
|
||||||
|
traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* configQUEUE_REGISTRY_SIZE */
|
#endif /* configQUEUE_REGISTRY_SIZE */
|
||||||
|
|
Loading…
Reference in a new issue