From: Olivier Houchard Date: Wed, 5 Nov 2025 18:12:17 +0000 (+0100) Subject: BUG/MEDIUM: stick-tables: Make sure we handle expiration on all tables X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=93f994e8b17d270cf86af74b4efa508ea4cc9293;p=thirdparty%2Fhaproxy.git BUG/MEDIUM: stick-tables: Make sure we handle expiration on all tables In process_tables_expire(), when parsing all the tables with expiration set, to check if the any entry expired, make sure we start from the oldest one, we can't just rely on eb32_first(), because of sign issues on the timestamp. Not doing that may mean some tables are not considered for expiration. This does not need to be backported. --- diff --git a/src/stick_table.c b/src/stick_table.c index 9d4a75c19..3f8eeb229 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -986,7 +986,9 @@ struct task *process_tables_expire(struct task *task, void *context, unsigned in t->shards[shard].in_bucket.key = next_exp; eb32_insert(&ps->tables, &t->shards[shard].in_bucket); } - table_eb = eb32_first(&ps->tables); + table_eb = eb32_lookup_ge(&ps->tables, now_ms - TIMER_LOOK_BACK); + if (!table_eb) + table_eb = eb32_first(&ps->tables); while (table_eb) { struct eb32_node *tmpnode;