From: Olivier Houchard Date: Tue, 14 Oct 2025 16:51:32 +0000 (+0200) Subject: MEDIUM: stick-tables: Stop if stktable_trash_oldest() fails. X-Git-Tag: v3.3-dev11~76 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=7854331c718bc8dcd6ed9cd3bc3c3932fdc9945b;p=thirdparty%2Fhaproxy.git MEDIUM: stick-tables: Stop if stktable_trash_oldest() fails. In stksess_new(), if the table is full, we call stktable_trash_oldest() to remove a few entries so that we have some room for a new one. It is unlikely, but possible, that stktable_trash_oldest() will fail. If so, just give up and do not add the new entry, instead of adding it anyway. Give up if stktable_trash_oldest() fails to free any entry --- diff --git a/src/stick_table.c b/src/stick_table.c index e59e8b8fd..2d889b48a 100644 --- a/src/stick_table.c +++ b/src/stick_table.c @@ -443,11 +443,13 @@ struct stksess *stksess_new(struct stktable *t, struct stktable_key *key) HA_ATOMIC_DEC(&t->current); return NULL; } - /* note that it may fail to find any releasable slot due to - * locking contention but it's not a problem in practice, - * these will be recovered later. - */ - stktable_trash_oldest(t); + if (stktable_trash_oldest(t) < 1) { + /* + * If we did not manage to purge any entry, give up. + */ + HA_ATOMIC_DEC(&t->current); + return NULL; + } } ts = pool_alloc(t->pool);