From e62bdd40268d8f268e694cace998537f4cc0f508 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sun, 29 Jun 2008 10:25:57 +0200 Subject: [PATCH] [BUG] wqueue: perform proper timeout comparisons with wrapping values With wrapping keys, we cannot simply do "if (key > now)", but we must at least do "if ((signed)(key-now) > 0)". --- src/task.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/task.c b/src/task.c index 16eea645b..2c9e0d7a8 100644 --- a/src/task.c +++ b/src/task.c @@ -148,7 +148,7 @@ void wake_expired_tasks(struct timeval *next) struct eb32_node *next_eb; task = eb32_entry(eb, struct task, eb); - if (eb->key > now_key) { + if ((signed)(eb->key - now_key) > 0) { *next = task->expire; timers.first = task->expire; return;