diff --git a/core/thread.c b/core/thread.c index 6e78c12..03ec00d 100644 --- a/core/thread.c +++ b/core/thread.c @@ -232,17 +232,18 @@ int threadOnJieffiesTick() disable_IRQs(flags); list_foreach(currentThread, nextThread, idx) { - if (nextThread->state == SLEEPING && nextThread->jiffiesSleeping) { - nextThread->jiffiesSleeping--; - if (!nextThread->jiffiesSleeping) { + if (nextThread->state == SLEEPING) { + if (nextThread->jiffiesSleeping) + nextThread->jiffiesSleeping--; + if (!nextThread->jiffiesSleeping) nextThread->state = READY; - } } } list_foreach_named(threadWithTimeout, nextThread, idx, timePrev, timeNext) { - if (nextThread->state == WAITING && nextThread->jiffiesSleeping) { - nextThread->jiffiesSleeping--; + if (nextThread->state == WAITING) { + if (nextThread->jiffiesSleeping) + nextThread->jiffiesSleeping--; if (!nextThread->jiffiesSleeping) { nextThread->sleepHaveTimeouted = 1; list_delete_named(threadWithTimeout, nextThread, timePrev, timeNext); @@ -332,8 +333,6 @@ int threadUsleep(unsigned long usec) current->state = SLEEPING; current->sleepHaveTimeouted = 0; current->jiffiesSleeping = usecs_to_jiffies(usec); - if (!current->jiffiesSleeping) // sleep at least 1 jiffies - current->jiffiesSleeping = 1; next = threadSelectNext(); assert(next != current);