Skip to content

Commit eeeeea8

Browse files
committed
Add dequeuing ready queue path in mo_task_delay()
Previously, mo_task_delay() only set TASK_BLOCKED and updated delayed ticks. In the new ready-queue-based scheduler, delayed tasks must also be removed from the ready queue. This change calls sched_dequeue_task() in mo_task_delay() so that the task is properly dequeued from its priority ready queue when it is delayed.
1 parent 890ae05 commit eeeeea8

File tree

1 file changed

+3
-1
lines changed

1 file changed

+3
-1
lines changed

kernel/task.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -752,11 +752,13 @@ void mo_task_delay(uint16_t ticks)
752752

753753
tcb_t *self = kcb->task_current->data;
754754

755-
/* Set delay and blocked state - scheduler will skip blocked tasks */
755+
/* Set delay and blocked state, dequeue from ready queue */
756+
list_node_t *rq_node = sched_dequeue_task(self);
756757
self->delay = ticks;
757758
self->state = TASK_BLOCKED;
758759
NOSCHED_LEAVE();
759760

761+
free(rq_node);
760762
mo_task_yield();
761763
}
762764

0 commit comments

Comments
 (0)