1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-17 05:12:57 +01:00

xtimer: set now pointer correctly in _update_short_timers() loop

This fixes `xtimer` to use `xtimer_now64()` instead of `xtimer_now()`
for updating the `*now` variable during the iteration in
`_update_short_timers()` function. The same function is used to
initialize `*now` in `_timer_callback()` below.

While using `xtimer_now()` in this iteration step does not hinder the
proper execution of all timers in the short term timers (for those the
`xtimer` module only looks at the `start_time` member, not the
`long_start_time` member) at least for the current long term time window
(I did not test higher cases), it sets the `long_start_time` member to 0
for all timers following in the list of timers after this iteration
step. However, external modules that rely on this to be correct,
e.g. evtimer [1], fail their calculations when trying to compare to
the current value to `xtimer_now64()`.

[1] https://github.com/RIOT-OS/RIOT/blob/11f3d68/sys/evtimer/evtimer.c#L118-L121

Co-Authored-By: Cenk Gündoğan <mail+dev@gundogan.net>
This commit is contained in:
Martine S. Lenders 2020-04-09 23:21:42 +02:00
parent 11f3d68887
commit 212fe15786
No known key found for this signature in database
GPG Key ID: CCD317364F63286F

View File

@ -292,7 +292,7 @@ static inline void _update_short_timers(uint64_t *now)
/* assign new head */
timer = timer_list_head;
/* update current_time */
*now = _xtimer_now();
*now = _xtimer_now64();
}
else {
timer->offset -= elapsed;