From 30f931ead209aa4966ff5af3cbd01517096c9163 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 23 Oct 2018 14:40:23 +0200 Subject: [PATCH] BUG/MEDIUM: pools: fix the minimum allocation size Fred reported a random crash related to the pools. This was introduced by commit e18db9e98 ("MEDIUM: pools: implement a thread-local cache for pool entries") because the minimum pool item size should have been increased to 32 bytes to accommodate the 2 double-linked lists. No backport is needed. --- src/memory.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/memory.c b/src/memory.c index 6a345e5569..c4ba54edf0 100644 --- a/src/memory.c +++ b/src/memory.c @@ -62,10 +62,12 @@ struct pool_head *create_pool(char *name, unsigned int size, unsigned int flags) * ease merging of entries. Note that the rounding is a power of two. * This extra (void *) is not accounted for in the size computation * so that the visible parts outside are not affected. + * + * Note: for the LRU cache, we need to store 2 doubly-linked lists. */ if (!(flags & MEM_F_EXACT)) { - align = 16; + align = 4 * sizeof(void *); // 2 lists = 4 pointers min size = ((size + POOL_EXTRA + align - 1) & -align) - POOL_EXTRA; } -- 2.39.5