diff options
Diffstat (limited to 'src/kernel/task/sched.cpp')
-rw-r--r-- | src/kernel/task/sched.cpp | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/src/kernel/task/sched.cpp b/src/kernel/task/sched.cpp index 36f6783..c17f271 100644 --- a/src/kernel/task/sched.cpp +++ b/src/kernel/task/sched.cpp @@ -26,9 +26,10 @@ static void sched_enqueueIn(thread *t, int qid) { static thread *sched_dequeueFrom(int qid) { if (queue[qid] == 0) return 0; thread *it = queue[qid]; - ASSERT((it->queue_next == 0 && it == last[qid]) || it != last[qid]); + ASSERT((it->queue_next == 0 && it == last[qid]) || (it->queue_next != 0 && it != last[qid])); queue[qid] = it->queue_next; if (queue[qid] == 0) last[qid] = 0; + it->queue_next = 0; return it; } @@ -55,11 +56,15 @@ void sched_remove(thread *t) { for (int i = 0; i < PRIORITIES; i++) { if (queue[i] == t) { queue[i] = t->queue_next; + ASSERT((t->queue_next == 0 && last[i] == t) || (t->queue_next != 0 && last[i] != t)); + if (last[i] == t) last[i] = 0; } else if (queue[i] != 0) { thread *it = queue[i]; while (it->queue_next != 0) { if (it->queue_next == t) { it->queue_next = t->queue_next; + ASSERT((t->queue_next == 0 && last[i] == t) || (t->queue_next != 0 && last[i] != t)); + if (last[i] == t) last[i] = it; break; } it = it->queue_next; |