]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: pools: fix the minimum allocation size
authorWilly Tarreau <w@1wt.eu>
Tue, 23 Oct 2018 12:40:23 +0000 (14:40 +0200)
committerWilly Tarreau <w@1wt.eu>
Tue, 23 Oct 2018 12:40:23 +0000 (14:40 +0200)
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

index 6a345e5569167a8db13ff5923d76fe7f40c3e265..c4ba54edf09228a2d2aa4d9577d7aece4cacdaf6 100644 (file)
@@ -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;
        }