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.
pull/305/head^2
Paul Bartell 4 years ago committed by GitHub
parent a31018d025
commit a22b438e60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -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
* 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
* is the handle returned by a call to xQueueCreate(). Semaphore and mutex
* handles can also be passed in here.

@ -2730,24 +2730,37 @@ BaseType_t xQueueIsQueueFullFromISR( const QueueHandle_t xQueue )
configASSERT( xQueue );
configASSERT( pcQueueName );
QueueRegistryItem_t * pxEntryToWrite = NULL;
/* See if there is an empty space in the registry. A NULL name denotes
* a free slot. */
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. */
xQueueRegistry[ ux ].pcQueueName = pcQueueName;
xQueueRegistry[ ux ].xHandle = xQueue;
traceQUEUE_REGISTRY_ADD( xQueue, pcQueueName );
pxEntryToWrite = &( xQueueRegistry[ ux ] );
break;
}
/* Otherwise, store in the next empty location */
else if( ( NULL == pxEntryToWrite ) && ( xQueueRegistry[ ux ].pcQueueName == NULL ) )
{
pxEntryToWrite = &( xQueueRegistry[ ux ] );
}
else
{
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 */

Loading…
Cancel
Save