From: Willy Tarreau Date: Sat, 17 Apr 2021 14:00:08 +0000 (+0200) Subject: MINOR: pools: move the fault injector to __pool_alloc() X-Git-Tag: v2.4-dev17~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=207c09509;p=thirdparty%2Fhaproxy.git MINOR: pools: move the fault injector to __pool_alloc() Till now it was limited to objects allocated from the OS which means it had little use as soon as pools were enabled. Let's move it upper in the layers so that any code can benefit from fault injection. In addition this allows to pass a new flag POOL_F_NO_FAIL to disable it if some callers prefer a no-failure approach. --- diff --git a/include/haproxy/pool-t.h b/include/haproxy/pool-t.h index 073fe3251a..bbdc5365a0 100644 --- a/include/haproxy/pool-t.h +++ b/include/haproxy/pool-t.h @@ -80,6 +80,7 @@ /* possible flags for __pool_alloc() */ #define POOL_F_NO_POISON 0x00000001 // do not poison the area #define POOL_F_MUST_ZERO 0x00000002 // zero the returned area +#define POOL_F_NO_FAIL 0x00000004 // do not randomly fail struct pool_cache_head { diff --git a/include/haproxy/pool.h b/include/haproxy/pool.h index 6f01971154..0f76b96583 100644 --- a/include/haproxy/pool.h +++ b/include/haproxy/pool.h @@ -275,6 +275,11 @@ static inline void *__pool_alloc(struct pool_head *pool, unsigned int flags) { void *p; +#ifdef DEBUG_FAIL_ALLOC + if (!(flags & POOL_F_NO_FAIL) && mem_should_fail(pool)) + return NULL; +#endif + #ifdef CONFIG_HAP_POOLS if (likely(p = pool_get_from_local_cache(pool))) goto ret; diff --git a/src/pool.c b/src/pool.c index 48cc46788b..5939d961d1 100644 --- a/src/pool.c +++ b/src/pool.c @@ -158,10 +158,6 @@ void *pool_alloc_nocache(struct pool_head *pool) int limit = pool->limit; void *ptr = NULL; -#ifdef DEBUG_FAIL_ALLOC - if (mem_should_fail(pool)) - return NULL; -#endif if (limit && allocated >= limit) { activity[tid].pool_fail++; return NULL;