From 68fc39b5b96bb0afdcf5fe6d7a2c443f26a57f64 Mon Sep 17 00:00:00 2001
From: sasan-golchin <ahmad.golchin@mail.polimi.it>
Date: Mon, 7 Nov 2016 14:55:40 +0100
Subject: [PATCH] Priority Scheduler FIX - returns the correct
 nextPreemptionTime

---
 .../scheduler/priority/priority_scheduler.cpp    | 16 ++++++----------
 1 file changed, 6 insertions(+), 10 deletions(-)

diff --git a/miosix/kernel/scheduler/priority/priority_scheduler.cpp b/miosix/kernel/scheduler/priority/priority_scheduler.cpp
index 1ecefc64..8fbee9b6 100644
--- a/miosix/kernel/scheduler/priority/priority_scheduler.cpp
+++ b/miosix/kernel/scheduler/priority/priority_scheduler.cpp
@@ -215,16 +215,12 @@ static void IRQsetNextPreemption(bool curIsIdleThread){
     else
         firstWakeupInList = sleepingList->front()->wakeup_time;
     
-    if (curIsIdleThread){
-        timer.IRQsetNextInterrupt(firstWakeupInList);
-        nextPeriodicPreemption = std::numeric_limits<long long>::max();
-    }else{
-        nextPeriodicPreemption = timer.IRQgetCurrentTime() + preemptionPeriodNs;   
-        if (firstWakeupInList < nextPeriodicPreemption )
-            timer.IRQsetNextInterrupt(firstWakeupInList);
-        else
-            timer.IRQsetNextInterrupt(nextPeriodicPreemption);
-    }
+    if (curIsIdleThread)
+        nextPeriodicPreemption = firstWakeupInList;
+    else
+        nextPeriodicPreemption = std::min(firstWakeupInList, timer.IRQgetCurrentTime() + preemptionPeriodNs);
+    
+    timer.IRQsetNextInterrupt(nextPeriodicPreemption);
 }
 
 unsigned int PriorityScheduler::IRQfindNextThread()
-- 
GitLab