Remove run state assertion in prvCheckForRunStateChange (#1093)
In `prvCheckForRunStateChange()`, enabling interrupts should cause this core to immediately service the pending interrupt and yield. Upon the next scheduling of the task, the assertion `configASSERT(pxThisTCB->xTaskRunState != taskTASK_SCHEDULED_TO_YIELD);` may not be true, as other cores could have requested a yield for this task before it evaluates its run state within the assertion. To address this, the task re-evaluates its run state in critical section within a loop until it is eligible for execution, which is the current implementation. Consequently, this assertion should be removed to ensure correct behavior.
diff --git a/tasks.c b/tasks.c
index f874025..7a65e7b 100644
--- a/tasks.c
+++ b/tasks.c
@@ -845,10 +845,11 @@
portENABLE_INTERRUPTS();
- /* Enabling interrupts should cause this core to immediately
- * service the pending interrupt and yield. If the run state is still
- * yielding here then that is a problem. */
- configASSERT( pxThisTCB->xTaskRunState != taskTASK_SCHEDULED_TO_YIELD );
+ /* Enabling interrupts should cause this core to immediately service
+ * the pending interrupt and yield. After servicing the pending interrupt,
+ * the task needs to re-evaluate its run state within this loop, as
+ * other cores may have requested this task to yield, potentially altering
+ * its run state. */
portDISABLE_INTERRUPTS();
portGET_TASK_LOCK();