Skip to content

Commit

Permalink
xtimer: set now pointer correctly in _update_short_timers() loop
Browse files Browse the repository at this point in the history
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:/RIOT-OS/RIOT/blob/11f3d68/sys/evtimer/evtimer.c#L118-L121

Co-Authored-By: Cenk Gündoğan <[email protected]>
  • Loading branch information
miri64 and cgundogan committed Apr 9, 2020
1 parent 11f3d68 commit 212fe15
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion sys/xtimer/xtimer_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 212fe15

Please sign in to comment.