mirror of
				https://github.com/FreeRTOS/FreeRTOS-Kernel.git
				synced 2025-11-04 11:09:01 +01: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
 | 
			
		||||
 * 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.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										25
									
								
								queue.c
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								queue.c
									
									
									
									
									
								
							@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user