diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/kern/kern_sched.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/kern/kern_sched.c b/sys/kern/kern_sched.c index 8a2a40f..d656f94 100644 --- a/sys/kern/kern_sched.c +++ b/sys/kern/kern_sched.c @@ -113,11 +113,18 @@ sched_dequeue_td(void) continue; } - TAILQ_REMOVE(&queue->q, td, link); - if (ISSET(td->flags, PROC_SLEEP)) { + while (ISSET(td->flags, PROC_SLEEP)) { + td = TAILQ_NEXT(td, link); + if (td == NULL) { + break; + } + } + + if (td == NULL) { continue; } + TAILQ_REMOVE(&queue->q, td, link); spinlock_release(&tdq_lock); return td; } |