From: Willy Tarreau Date: Tue, 6 Apr 2021 09:46:58 +0000 (+0200) Subject: CLEANUP: atomic: make all standard add/or/and/sub operations return void X-Git-Tag: v2.4-dev16~16 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a477150fd7ceba3af3d4db64bcf924f8a8f2da6c;p=thirdparty%2Fhaproxy.git 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. --- diff --git a/include/haproxy/atomic.h b/include/haproxy/atomic.h index 7a357dae2f..edf4cf5861 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)