diff --git a/sched/core.c b/sched/core.c index 70bbfc5..277b826 100644 --- a/sched/core.c +++ b/sched/core.c @@ -123,8 +123,16 @@ void __schedule(enum sched_mode mode) enum thread_state prev_state = READ_ONCE(prev->tr_state); - if ((mode == SCHED_IRQ || prev_state == THREAD_READY) - && prev != rq->rq_idle) { + bool reschedule = false; + if (prev_state == THREAD_READY || mode == SCHED_IRQ) { + reschedule = true; + } + + if (prev == rq->rq_idle || prev_state == THREAD_STOPPED) { + reschedule = false; + } + + if (reschedule) { rq_enqueue(rq, prev); }