DEBUG: pools: add extra sanity checks when picking objects from a local cache
These few checks are added to make sure we never try to pick an object from
an empty list, which would have a devastating effect.
diff --git a/include/haproxy/pool.h b/include/haproxy/pool.h
index de41fa1..9b80842 100644
--- a/include/haproxy/pool.h
+++ b/include/haproxy/pool.h
@@ -289,6 +289,7 @@
/* allocate hottest objects first */
item = LIST_NEXT(&ph->list, typeof(item), by_pool);
#endif
+ BUG_ON(&item->by_pool == &ph->list);
LIST_DELETE(&item->by_pool);
LIST_DELETE(&item->by_lru);
diff --git a/src/pool.c b/src/pool.c
index 0bb79d0..554d1cb 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -329,6 +329,7 @@
while (released < count && !LIST_ISEMPTY(&ph->list)) {
item = LIST_PREV(&ph->list, typeof(item), by_pool);
+ BUG_ON(&item->by_pool == &ph->list);
pool_check_pattern(ph, item, pool->size);
LIST_DELETE(&item->by_pool);
LIST_DELETE(&item->by_lru);
@@ -389,6 +390,7 @@
do {
item = LIST_PREV(&th_ctx->pool_lru_head, struct pool_cache_item *, by_lru);
+ BUG_ON(&item->by_lru == &th_ctx->pool_lru_head);
/* note: by definition we remove oldest objects so they also are the
* oldest in their own pools, thus their next is the pool's head.
*/