From 7a6ad88b02d8b74c2488003afb1a7063043ddd2d Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Sat, 20 Oct 2018 17:37:38 +0200 Subject: [PATCH] BUILD: memory: fix free_list pointer declaration again for atomic CAS Commit ac6c880 ("BUILD: memory: fix pointer declaration for atomic CAS") attemtped to fix a build warning affecting the lock-free version of the pool allocator. But the fix tried to hide the cause instead of addressing it, thus clang still complains about (void **) not matching (void ***). The real solution is to declare free_list (void **) and not to use a cast. Now this builds fine with gcc/clang with and without threads. No backport is needed. --- include/common/memory.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/common/memory.h b/include/common/memory.h index da96b8292..5fde4bcdd 100644 --- a/include/common/memory.h +++ b/include/common/memory.h @@ -267,12 +267,12 @@ static inline void *pool_alloc(struct pool_head *pool) */ static inline void __pool_free(struct pool_head *pool, void *ptr) { - void *free_list = pool->free_list; + void **free_list = pool->free_list; do { *POOL_LINK(pool, ptr) = (void *)free_list; __ha_barrier_store(); - } while (!HA_ATOMIC_CAS(&pool->free_list, (void **)&free_list, ptr)); + } while (!HA_ATOMIC_CAS(&pool->free_list, &free_list, ptr)); HA_ATOMIC_SUB(&pool->used, 1); }