]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUILD: atomic: make the old HA_ATOMIC_LOAD() support const pointers
authorWilly Tarreau <w@1wt.eu>
Fri, 28 Jan 2022 07:52:57 +0000 (08:52 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 28 Jan 2022 18:04:02 +0000 (19:04 +0100)
We have an implementation of atomic ops for older versions of gcc that
do not provide the __builtin_* API (< 4.4). Recent changes to the pools
broke that in pool_releasable() by having a load from a const pointer,
which doesn't work there due to a temporary local variable that is
declared then assigned. Let's make use of a compount statement to assign
it a value when declaring it.

There's no need to backport this.

include/haproxy/atomic.h

index af0b10a07e7b7d23b09c0f9979aec9c6c62d8ae3..f60be95c1e2c95004f2d7d7402367453f76a3034 100644 (file)
 #if defined(__GNUC__) && (__GNUC__ < 4 || __GNUC__ == 4 && __GNUC_MINOR__ < 7) && !defined(__clang__)
 /* gcc < 4.7 */
 
-#define HA_ATOMIC_LOAD(val)                                            \
-        ({                                                             \
-               typeof(*(val)) ret;                                     \
-               __sync_synchronize();                                   \
-               ret = *(volatile typeof(val))val;                       \
-               __sync_synchronize();                                   \
-               ret;                                                    \
+#define HA_ATOMIC_LOAD(val)                                                  \
+        ({                                                                   \
+               typeof(*(val)) ret =                                          \
+                   ({ __sync_synchronize(); *(volatile typeof(val))val; });  \
+               __sync_synchronize();                                         \
+               ret;                                                          \
        })
 
 #define HA_ATOMIC_STORE(val, new)                                      \