sched: don't reschedule a thread if its status is THREAD_STOPPED
This commit is contained in:
12
sched/core.c
12
sched/core.c
@@ -123,8 +123,16 @@ void __schedule(enum sched_mode mode)
|
|||||||
|
|
||||||
enum thread_state prev_state = READ_ONCE(prev->tr_state);
|
enum thread_state prev_state = READ_ONCE(prev->tr_state);
|
||||||
|
|
||||||
if ((mode == SCHED_IRQ || prev_state == THREAD_READY)
|
bool reschedule = false;
|
||||||
&& prev != rq->rq_idle) {
|
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);
|
rq_enqueue(rq, prev);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user