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 073fe32..bbdc536 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 6f01971..0f76b96 100644
--- a/include/haproxy/pool.h
+++ b/include/haproxy/pool.h
@@ -275,6 +275,11 @@
 {
 	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 48cc467..5939d96 100644
--- a/src/pool.c
+++ b/src/pool.c
@@ -158,10 +158,6 @@
 	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;