Skip to content

Commit

Permalink
ztimer: correctly unset timer->next (fix ztimer_is_set())
Browse files Browse the repository at this point in the history
ztimer's machinery depends on figuring out if a timer is currently set
or not. It does that using _is_set(), which is also exposed as
ztimer_is_set().
Now when a timer expired and got taken of the timer queue using
_now_next(), the `next` pointer wasn't unset. This caused _is_set() to
wrongly return `true` for that timer.
Internally in ztimer, this didn't cause breakage, just an unnecessary
iteration of the timer queue by _delete_timer_from_list().
But this also broke the public ztimer_is_set().

This commit fixes the issue by correctly NULLing the timer's `next`
pointer when the timer triggers.
  • Loading branch information
kaspar030 committed Apr 22, 2021
1 parent 855a6fa commit 88b509e
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions sys/ztimer/core.c
Expand Up @@ -281,6 +281,10 @@ static ztimer_t *_now_next(ztimer_clock_t *clock)
}
#endif
}
else {
/* reset next pointer so ztimer_is_set() works */
entry->next = NULL;
}
return (ztimer_t *)entry;
}
else {
Expand Down

0 comments on commit 88b509e

Please sign in to comment.