BUILD: memory: fix pointer declaration for atomic CAS

The calls to HA_ATOMIC_CAS() on the lockfree version of the pool allocator
were mistakenly done on (void*) for the old value instead of (void **).
While this has no impact on "recent" gcc, it does have one for gcc < 4.7
since the CAS was open coded and it's not possible to assign a temporary
variable of type "void".

No backport is needed, this only affects 1.9.
This commit is contained in:
Willy Tarreau 2018-10-18 16:12:28 +02:00
parent 7e9c4ae4de
commit ac6c8805be
2 changed files with 3 additions and 3 deletions

View File

@ -272,7 +272,7 @@ static inline void __pool_free(struct pool_head *pool, void *ptr)
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, (void **)&free_list, ptr));
HA_ATOMIC_SUB(&pool->used, 1);
}

View File

@ -168,7 +168,7 @@ void *__pool_refill_alloc(struct pool_head *pool, unsigned int avail)
do {
*POOL_LINK(pool, ptr) = free_list;
__ha_barrier_store();
} while (HA_ATOMIC_CAS(&pool->free_list, (void *)&free_list, ptr) == 0);
} while (HA_ATOMIC_CAS(&pool->free_list, (void **)&free_list, ptr) == 0);
}
HA_ATOMIC_ADD(&pool->allocated, allocated - allocated_orig);
@ -199,7 +199,7 @@ void pool_flush(struct pool_head *pool)
return;
do {
next = pool->free_list;
} while (!HA_ATOMIC_CAS(&pool->free_list, (void *)&next, NULL));
} while (!HA_ATOMIC_CAS(&pool->free_list, (void **)&next, NULL));
while (next) {
temp = next;
next = *POOL_LINK(pool, temp);