mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-10 09:07:02 +02:00
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:
parent
7e9c4ae4de
commit
ac6c8805be
@ -272,7 +272,7 @@ static inline void __pool_free(struct pool_head *pool, void *ptr)
|
|||||||
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, (void **)&free_list, ptr));
|
||||||
HA_ATOMIC_SUB(&pool->used, 1);
|
HA_ATOMIC_SUB(&pool->used, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -168,7 +168,7 @@ void *__pool_refill_alloc(struct pool_head *pool, unsigned int avail)
|
|||||||
do {
|
do {
|
||||||
*POOL_LINK(pool, ptr) = free_list;
|
*POOL_LINK(pool, ptr) = free_list;
|
||||||
__ha_barrier_store();
|
__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);
|
HA_ATOMIC_ADD(&pool->allocated, allocated - allocated_orig);
|
||||||
@ -199,7 +199,7 @@ void pool_flush(struct pool_head *pool)
|
|||||||
return;
|
return;
|
||||||
do {
|
do {
|
||||||
next = pool->free_list;
|
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) {
|
while (next) {
|
||||||
temp = next;
|
temp = next;
|
||||||
next = *POOL_LINK(pool, temp);
|
next = *POOL_LINK(pool, temp);
|
||||||
|
Loading…
Reference in New Issue
Block a user