From: Willy Tarreau Date: Sat, 20 Oct 2018 15:37:38 +0000 (+0200) Subject: BUILD: memory: fix free_list pointer declaration again for atomic CAS X-Git-Tag: v1.9-dev4~13 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7a6ad88b02d8b74c2488003afb1a7063043ddd2d;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/include/common/memory.h b/include/common/memory.h index da96b82926..5fde4bcddc 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); }