From eddb82390a0ecb07ef83c04861993842906b03ab Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 19 Dec 2009 15:31:36 -0800 Subject: [PATCH] Ensure that ao_alarm waits at least the specified time Because the timer tick may happen soon, it's important to delay by another tick to ensure that we don't wake up early. Signed-off-by: Keith Packard --- src/ao_task.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/ao_task.c b/src/ao_task.c index 4664163d..4a78766e 100644 --- a/src/ao_task.c +++ b/src/ao_task.c @@ -217,7 +217,10 @@ ao_wakeup(__xdata void *wchan) void ao_alarm(uint16_t delay) { - if (!(ao_cur_task->alarm = ao_time() + delay)) + /* Make sure we sleep *at least* delay ticks, which means adding + * one to account for the fact that we may be close to the next tick + */ + if (!(ao_cur_task->alarm = ao_time() + delay + 1)) ao_cur_task->alarm = 1; } -- 2.30.2