Skip to content

Commit 81ea04d

Browse files
authored
fix: Ensure Scheduler::get_global_tick() is monotonic (#672)
* fix: Ensure Scheduler::get_global_tick() is monotonic * chore: fix changeset
1 parent fa85f49 commit 81ea04d

2 files changed

Lines changed: 8 additions & 0 deletions

File tree

.changesets/scheduler-monotonic.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
release: patch
2+
summary: Adds a check to ensure return values from Scheduler::get_global_tick() are monotonic (never get decreasing values)

Src/HALAL/Services/Time/Scheduler.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,16 @@ void Scheduler::update() {
101101
}
102102

103103
uint64_t Scheduler::get_global_tick() {
104+
static uint64_t last_tick{0};
104105
SchedLock();
105106
uint64_t tick = global_tick_us_;
106107
tick += Scheduler_global_timer->CNT;
107108
SchedUnlock();
109+
if (tick < last_tick) [[unlikely]] {
110+
tick = last_tick;
111+
} else {
112+
last_tick = tick;
113+
}
108114
return tick;
109115
}
110116

0 commit comments

Comments
 (0)