The auto-reload timer callback seems execute one-time more than expected

on FreeRTOS v10.4.4, the expired timer callback will be continues to be executed in prvReloadTimer(), but seems the expired callback seems execute one-time more than expected.

both prvProcessExpiredTimer() and prvProcessReceivedCommands() seems have the same issue.
static void prvProcessExpiredTimer( const TickType_t xNextExpireTime,
const TickType_t xTimeNow )
{

( void ) uxListRemove( &( pxTimer->xTimerListItem ) );

    /* If the timer is an auto-reload timer then calculate the next
     * expiry time and re-insert the timer in the list of active timers. */
    if( ( pxTimer->ucStatus & tmrSTATUS_IS_AUTORELOAD ) != 0 )
    {
        prvReloadTimer( pxTimer, xNextExpireTime, xTimeNow );  //all expired timer callback executed at here
    }
    else
    {
        pxTimer->ucStatus &= ~tmrSTATUS_IS_ACTIVE;
    }

    /* Call the timer callback. */
    traceTIMER_EXPIRED( pxTimer );
    pxTimer->pxCallbackFunction( ( TimerHandle_t ) pxTimer ); //should move this line into the last else-branch for the non-auto-reload timer
}

Hi @yinli, do you have an example or specific case where the callback is called more times than expected? Normally, prvReloadTimer() does not call the callback function at all, due to the condition of this while() statement. In fact, you can consider any callbacks made from prvReloadTimer() to be “late” or “overdue”. Or did I miss something?