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.
This commit is contained in:
Willy Tarreau 2018-10-20 17:37:38 +02:00
parent ed72d82827
commit 7a6ad88b02

View File

@ -267,12 +267,12 @@ static inline void *pool_alloc(struct pool_head *pool)
*/ */
static inline void __pool_free(struct pool_head *pool, void *ptr) static inline void __pool_free(struct pool_head *pool, void *ptr)
{ {
void *free_list = pool->free_list; void **free_list = pool->free_list;
do { do {
*POOL_LINK(pool, ptr) = (void *)free_list; *POOL_LINK(pool, ptr) = (void *)free_list;
__ha_barrier_store(); __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); HA_ATOMIC_SUB(&pool->used, 1);
} }