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:
parent
855a6fa36a
commit
88b509e56d
@ -281,6 +281,10 @@ static ztimer_t *_now_next(ztimer_clock_t *clock)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
/* reset next pointer so ztimer_is_set() works */
|
||||||
|
entry->next = NULL;
|
||||||
|
}
|
||||||
return (ztimer_t *)entry;
|
return (ztimer_t *)entry;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user