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
This commit is contained in:
Olivier Houchard 2025-10-14 18:51:32 +02:00 committed by Olivier Houchard
parent d5562e31bd
commit 7854331c71

View File

@ -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);