1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

ztimer: correctly unset timer->next (fix ztimer_is_set())

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.
This commit is contained in:
Kaspar Schleiser 2021-04-22 11:06:04 +02:00
parent 855a6fa36a
commit 88b509e56d

View File

@ -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 {