mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-02-27 16:11:03 +00: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 {
|
||||
*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);
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user