diff --git a/src/system/kernel/scheduler/scheduler_thread.h b/src/system/kernel/scheduler/scheduler_thread.h index 26b1e43ba2..f3f7020781 100644 --- a/src/system/kernel/scheduler/scheduler_thread.h +++ b/src/system/kernel/scheduler/scheduler_thread.h @@ -277,6 +277,10 @@ ThreadData::GoesAway() ASSERT(fReady); + bigtime_t timeUsed = system_time() - fQuantumStart; + ASSERT(timeUsed >= 0); + fTimeLeft -= timeUsed; + if (!fReceivedPenalty) _IncreasePenalty(false); fHasSlept = true; @@ -416,15 +420,15 @@ ThreadData::HasQuantumEnded(bool wasPreempted, bool hasYielded) { SCHEDULER_ENTER_FUNCTION(); + bigtime_t timeUsed = system_time() - fQuantumStart; + ASSERT(timeUsed >= 0); + fTimeLeft -= timeUsed; + if (hasYielded) { fTimeLeft = 0; return true; } - bigtime_t timeUsed = system_time() - fQuantumStart; - ASSERT(timeUsed >= 0); - fTimeLeft -= timeUsed; - // too little time left, it's better make the next quantum a bit longer int32 skipTime = gCurrentMode->minimal_quantum / 2; if (wasPreempted || fTimeLeft <= skipTime) {