heimbase-atomics: let heim_base_atomic_* use 'long' instead of 'int' on AIX

As the atomics are signed on AIX, we better try to use the largest
possible max value.

The 'int' API uses 32-bit values for both 32-bit and 64-bit binaries:

  typedef int *atomic_p;

  int fetch_and_add(atomic_p addr, int value);

The 'long' API uses 32-bit values for 32-bit binaries and 64-bit values
for 64-bit binaries:

  typedef long *atomic_l;

  long fetch_and_addlp(atomic_l addr, long value);

So we better use the 'long' API in order to avoid any potential
problems with the heim_base_atomic_integer_max magic value, where
INT[32]_MAX would be a little bit low compared to 64-bit pointer space.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Stefan Metzmacher
2022-12-22 11:45:10 +01:00
committed by Luke Howard
parent 1e5cb64569
commit dc3ac8592b

View File

@@ -103,10 +103,10 @@
#define heim_base_atomic_barrier() __isync()
#define heim_base_atomic_inc(x) (fetch_and_add((atomic_p)(x), 1) + 1)
#define heim_base_atomic_dec(x) (fetch_and_add((atomic_p)(x), -1) - 1)
#define heim_base_atomic_integer_type int
#define heim_base_atomic_integer_max INT_MAX
#define heim_base_atomic_inc(x) (fetch_and_addlp((atomic_l)(x), 1) + 1)
#define heim_base_atomic_dec(x) (fetch_and_addlp((atomic_l)(x), -1) - 1)
#define heim_base_atomic_integer_type long
#define heim_base_atomic_integer_max LONG_MAX
static inline void *
heim_base_exchange_pointer(void *p, void *newval)