From a477150fd7ceba3af3d4db64bcf924f8a8f2da6c Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Tue, 6 Apr 2021 11:46:58 +0200 Subject: [PATCH] CLEANUP: atomic: make all standard add/or/and/sub operations return void In order to make sure these ones will not be used anymore in an expression, let's make them always void. New callers will now be forced to use the explicit _FETCH variant if required. --- include/haproxy/atomic.h | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/include/haproxy/atomic.h b/include/haproxy/atomic.h index 7a357dae2..edf4cf586 100644 --- a/include/haproxy/atomic.h +++ b/include/haproxy/atomic.h @@ -73,10 +73,10 @@ __old_xchg; \ }) -#define HA_ATOMIC_AND(val, flags) ({*(val) &= (flags);}) -#define HA_ATOMIC_OR(val, flags) ({*(val) |= (flags);}) -#define HA_ATOMIC_ADD(val, i) ({*(val) += (i);}) -#define HA_ATOMIC_SUB(val, i) ({*(val) -= (i);}) +#define HA_ATOMIC_AND(val, flags) do { *(val) &= (flags);} while (0) +#define HA_ATOMIC_OR(val, flags) do { *(val) |= (flags);} while (0) +#define HA_ATOMIC_ADD(val, i) do { *(val) += (i);} while (0) +#define HA_ATOMIC_SUB(val, i) do { *(val) -= (i);} while (0) #define HA_ATOMIC_AND_FETCH(val, flags) ({ *(val) &= (flags); }) #define HA_ATOMIC_OR_FETCH(val, flags) ({ *(val) |= (flags); }) @@ -198,10 +198,10 @@ __old_xchg; \ }) -#define HA_ATOMIC_AND(val, flags) __sync_and_and_fetch(val, flags) -#define HA_ATOMIC_OR(val, flags) __sync_or_and_fetch(val, flags) -#define HA_ATOMIC_ADD(val, i) __sync_add_and_fetch(val, i) -#define HA_ATOMIC_SUB(val, i) __sync_sub_and_fetch(val, i) +#define HA_ATOMIC_AND(val, flags) do { __sync_and_and_fetch(val, flags); } while (0) +#define HA_ATOMIC_OR(val, flags) do { __sync_or_and_fetch(val, flags); } while (0) +#define HA_ATOMIC_ADD(val, i) do { __sync_add_and_fetch(val, i); } while (0) +#define HA_ATOMIC_SUB(val, i) do { __sync_sub_and_fetch(val, i); } while (0) #define HA_ATOMIC_AND_FETCH(val, flags) __sync_and_and_fetch(val, flags) #define HA_ATOMIC_OR_FETCH(val, flags) __sync_or_and_fetch(val, flags) @@ -279,10 +279,10 @@ #define HA_ATOMIC_LOAD(val) __atomic_load_n(val, __ATOMIC_SEQ_CST) #define HA_ATOMIC_XCHG(val, new) __atomic_exchange_n(val, new, __ATOMIC_SEQ_CST) -#define HA_ATOMIC_AND(val, flags) __atomic_and_fetch(val, flags, __ATOMIC_SEQ_CST) -#define HA_ATOMIC_OR(val, flags) __atomic_or_fetch(val, flags, __ATOMIC_SEQ_CST) -#define HA_ATOMIC_ADD(val, i) __atomic_add_fetch(val, i, __ATOMIC_SEQ_CST) -#define HA_ATOMIC_SUB(val, i) __atomic_sub_fetch(val, i, __ATOMIC_SEQ_CST) +#define HA_ATOMIC_AND(val, flags) do { __atomic_and_fetch(val, flags, __ATOMIC_SEQ_CST); } while (0) +#define HA_ATOMIC_OR(val, flags) do { __atomic_or_fetch(val, flags, __ATOMIC_SEQ_CST); } while (0) +#define HA_ATOMIC_ADD(val, i) do { __atomic_add_fetch(val, i, __ATOMIC_SEQ_CST); } while (0) +#define HA_ATOMIC_SUB(val, i) do { __atomic_sub_fetch(val, i, __ATOMIC_SEQ_CST); } while (0) #define HA_ATOMIC_AND_FETCH(val, flags) __atomic_and_fetch(val, flags, __ATOMIC_SEQ_CST) #define HA_ATOMIC_OR_FETCH(val, flags) __atomic_or_fetch(val, flags, __ATOMIC_SEQ_CST) @@ -340,10 +340,11 @@ #define _HA_ATOMIC_LOAD(val) __atomic_load_n(val, __ATOMIC_RELAXED) #define _HA_ATOMIC_STORE(val, new) __atomic_store_n(val, new, __ATOMIC_RELAXED) #define _HA_ATOMIC_XCHG(val, new) __atomic_exchange_n(val, new, __ATOMIC_RELAXED) -#define _HA_ATOMIC_AND(val, flags) __atomic_and_fetch(val, flags, __ATOMIC_RELAXED) -#define _HA_ATOMIC_OR(val, flags) __atomic_or_fetch(val, flags, __ATOMIC_RELAXED) -#define _HA_ATOMIC_ADD(val, i) __atomic_add_fetch(val, i, __ATOMIC_RELAXED) -#define _HA_ATOMIC_SUB(val, i) __atomic_sub_fetch(val, i, __ATOMIC_RELAXED) + +#define _HA_ATOMIC_AND(val, flags) do { __atomic_and_fetch(val, flags, __ATOMIC_RELAXED); } while (0) +#define _HA_ATOMIC_OR(val, flags) do { __atomic_or_fetch(val, flags, __ATOMIC_RELAXED); } while (0) +#define _HA_ATOMIC_ADD(val, i) do { __atomic_add_fetch(val, i, __ATOMIC_RELAXED); } while (0) +#define _HA_ATOMIC_SUB(val, i) do { __atomic_sub_fetch(val, i, __ATOMIC_RELAXED); } while (0) #define _HA_ATOMIC_AND_FETCH(val, flags) __atomic_and_fetch(val, flags, __ATOMIC_RELAXED) #define _HA_ATOMIC_OR_FETCH(val, flags) __atomic_or_fetch(val, flags, __ATOMIC_RELAXED)