Fix context switch when time slicing is off (#568)
* Fix context switch when time slicing is off
When time slicing is off, context switch should only happen when a
task with priority higher than the currently executing one is unblocked.
Earlier the code was invoking a context switch even when a task with
priority equal the currently executing task was unblocked. This commit
fixes the code to only do a context switch when a higher priority
task is unblocked.
Signed-off-by: Gaurav Aggarwal <aggarg@amazon.com>
diff --git a/tasks.c b/tasks.c
index c7192e5..f09c95d 100644
--- a/tasks.c
+++ b/tasks.c
@@ -2812,10 +2812,14 @@
#if ( configUSE_PREEMPTION == 1 )
{
/* Preemption is on, but a context switch should
- * only be performed if the unblocked task has a
- * priority that is equal to or higher than the
- * currently executing task. */
- if( pxTCB->uxPriority >= pxCurrentTCB->uxPriority )
+ * only be performed if the unblocked task's
+ * priority is higher than the currently executing
+ * task.
+ * The case of equal priority tasks sharing
+ * processing time (which happens when both
+ * preemption and time slicing are on) is
+ * handled below.*/
+ if( pxTCB->uxPriority > pxCurrentTCB->uxPriority )
{
xSwitchRequired = pdTRUE;
}