diff --git a/components/freertos/FreeRTOS-Kernel/tasks.c b/components/freertos/FreeRTOS-Kernel/tasks.c index f7f49f797e..24eb47b948 100644 --- a/components/freertos/FreeRTOS-Kernel/tasks.c +++ b/components/freertos/FreeRTOS-Kernel/tasks.c @@ -1467,7 +1467,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB, configASSERT( pxPreviousWakeTime ); configASSERT( ( xTimeIncrement > 0U ) ); - configASSERT( uxSchedulerSuspended[xPortGetCoreID()] == 0 ); + configASSERT( xTaskGetSchedulerState() != taskSCHEDULER_SUSPENDED ); #ifdef ESP_PLATFORM // IDF-3755 taskENTER_CRITICAL(); @@ -1562,7 +1562,7 @@ static void prvAddNewTaskToReadyList( TCB_t * pxNewTCB, /* A delay time of zero just forces a reschedule. */ if( xTicksToDelay > ( TickType_t ) 0U ) { - configASSERT( uxSchedulerSuspended[xPortGetCoreID()] == 0 ); + configASSERT( xTaskGetSchedulerState() != taskSCHEDULER_SUSPENDED ); #ifdef ESP_PLATFORM // IDF-3755 taskENTER_CRITICAL(); #else @@ -2506,9 +2506,9 @@ BaseType_t xTaskResumeAll( void ) BaseType_t xAlreadyYielded = pdFALSE; TickType_t xTicksToNextUnblockTime; - /* If uxSchedulerSuspended[xPortGetCoreID()] is zero then this function does not match a + /* If scheduler state is `taskSCHEDULER_RUNNING` then this function does not match a * previous call to taskENTER_CRITICAL(). */ - configASSERT( uxSchedulerSuspended[xPortGetCoreID()] ); + configASSERT( xTaskGetSchedulerState() != taskSCHEDULER_RUNNING ); /* It is possible that an ISR caused a task to be removed from an event * list while the scheduler was suspended. If this was the case then the @@ -2967,7 +2967,7 @@ BaseType_t xTaskCatchUpTicks( TickType_t xTicksToCatchUp ) /* Must not be called with the scheduler suspended as the implementation * relies on xPendedTicks being wound down to 0 in xTaskResumeAll(). */ - configASSERT( uxSchedulerSuspended[xPortGetCoreID()] == 0 ); + configASSERT( xTaskGetSchedulerState() != taskSCHEDULER_SUSPENDED ); /* Use xPendedTicks to mimic xTicksToCatchUp number of ticks occuring when * the scheduler is suspended so the ticks are executed in xTaskResumeAll(). */ @@ -4664,7 +4664,9 @@ static void prvResetNextTaskUnblockTime( void ) BaseType_t xTaskGetSchedulerState( void ) { BaseType_t xReturn; + unsigned state; + state = portSET_INTERRUPT_MASK_FROM_ISR(); if( xSchedulerRunning == pdFALSE ) { xReturn = taskSCHEDULER_NOT_STARTED; @@ -4680,6 +4682,7 @@ static void prvResetNextTaskUnblockTime( void ) xReturn = taskSCHEDULER_SUSPENDED; } } + portCLEAR_INTERRUPT_MASK_FROM_ISR(state); return xReturn; }