From 7f212f45c3d669962ca86d14a3b6d80246b1a486 Mon Sep 17 00:00:00 2001 From: Pawel Dziepak Date: Wed, 15 Jan 2014 00:44:32 +0100 Subject: [PATCH] scheduler: Update used time when thread yields or sleeps --- src/system/kernel/scheduler/scheduler_thread.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) 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) {