From 93f994e8b17d270cf86af74b4efa508ea4cc9293 Mon Sep 17 00:00:00 2001 From: Olivier Houchard Date: Wed, 5 Nov 2025 19:12:17 +0100 Subject: [PATCH] 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. --- src/stick_table.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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;