zrhoffman / rpms / 389-ds-base

Forked from rpms/389-ds-base 3 years ago
Clone

Blame SOURCES/0001-Ticket-49305-Need-to-wrap-atomic-calls.patch

b045b9
From 76e8c99e00f776fdab6cf834923d19f911f06fb9 Mon Sep 17 00:00:00 2001
b045b9
From: Mark Reynolds <mreynolds@redhat.com>
b045b9
Date: Thu, 28 Sep 2017 10:38:20 -0400
b045b9
Subject: [PATCH] Ticket 49305 - Need to wrap atomic calls
b045b9
b045b9
Bug Description:  Some RHEL 7.5 platforms (ppc 32bit) still do not support
b045b9
                  all the gcc built-in atomics.  This breaks the downstream
b045b9
                  builds.
b045b9
b045b9
Fix Description:  Use wrapper functions for the atomic's using #define's
b045b9
                  to detect if builtin atomics are supported, otherwise
b045b9
                  use the generic nspr atomic functions.
b045b9
b045b9
https://pagure.io/389-ds-base/issue/49305
b045b9
b045b9
Reviewed by: tbordaz, lkrispen, and wibrown(Thanks!!!)
b045b9
b045b9
(cherry picked from commit 93a29584ddae52497b898b451c2c810244627acb)
b045b9
---
b045b9
 ldap/servers/slapd/attrsyntax.c        |   8 +-
b045b9
 ldap/servers/slapd/back-ldbm/dblayer.c |   8 +-
b045b9
 ldap/servers/slapd/entry.c             |   8 +-
b045b9
 ldap/servers/slapd/libglobs.c          | 154 ++++++++++++++++-----------------
b045b9
 ldap/servers/slapd/log.c               |   9 +-
b045b9
 ldap/servers/slapd/mapping_tree.c      |  28 +++---
b045b9
 ldap/servers/slapd/object.c            |   7 +-
b045b9
 ldap/servers/slapd/psearch.c           |   7 +-
b045b9
 ldap/servers/slapd/slapi-plugin.h      |  65 ++++++++++----
b045b9
 ldap/servers/slapd/slapi_counter.c     | 113 +++++++++++++-----------
b045b9
 10 files changed, 223 insertions(+), 184 deletions(-)
b045b9
b045b9
diff --git a/ldap/servers/slapd/attrsyntax.c b/ldap/servers/slapd/attrsyntax.c
b045b9
index a0a60c4..1a9efef 100644
b045b9
--- a/ldap/servers/slapd/attrsyntax.c
b045b9
+++ b/ldap/servers/slapd/attrsyntax.c
b045b9
@@ -274,7 +274,7 @@ attr_syntax_get_by_oid_locking_optional(const char *oid, PRBool use_lock, PRUint
b045b9
         }
b045b9
         asi = (struct asyntaxinfo *)PL_HashTableLookup_const(ht, oid);
b045b9
         if (asi) {
b045b9
-            slapi_atomic_incr(&(asi->asi_refcnt), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+            slapi_atomic_incr_64(&(asi->asi_refcnt), __ATOMIC_RELEASE);
b045b9
         }
b045b9
         if (use_lock) {
b045b9
             AS_UNLOCK_READ(oid2asi_lock);
b045b9
@@ -371,7 +371,7 @@ attr_syntax_get_by_name_locking_optional(const char *name, PRBool use_lock, PRUi
b045b9
         }
b045b9
         asi = (struct asyntaxinfo *)PL_HashTableLookup_const(ht, name);
b045b9
         if (NULL != asi) {
b045b9
-            slapi_atomic_incr(&(asi->asi_refcnt), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+            slapi_atomic_incr_64(&(asi->asi_refcnt), __ATOMIC_RELEASE);
b045b9
         }
b045b9
         if (use_lock) {
b045b9
             AS_UNLOCK_READ(name2asi_lock);
b045b9
@@ -406,7 +406,7 @@ attr_syntax_return_locking_optional(struct asyntaxinfo *asi, PRBool use_lock)
b045b9
     }
b045b9
     if (NULL != asi) {
b045b9
         PRBool delete_it = PR_FALSE;
b045b9
-        if (0 == slapi_atomic_decr(&(asi->asi_refcnt), __ATOMIC_ACQ_REL, ATOMIC_LONG)) {
b045b9
+        if (0 == slapi_atomic_decr_64(&(asi->asi_refcnt), __ATOMIC_ACQ_REL)) {
b045b9
             delete_it = asi->asi_marked_for_delete;
b045b9
         }
b045b9
 
b045b9
@@ -540,7 +540,7 @@ attr_syntax_delete_no_lock(struct asyntaxinfo *asi,
b045b9
                 PL_HashTableRemove(ht, asi->asi_aliases[i]);
b045b9
             }
b045b9
         }
b045b9
-        if (slapi_atomic_load(&(asi->asi_refcnt), __ATOMIC_ACQUIRE, ATOMIC_LONG) > 0) {
b045b9
+        if (slapi_atomic_load_64(&(asi->asi_refcnt), __ATOMIC_ACQUIRE) > 0) {
b045b9
             asi->asi_marked_for_delete = PR_TRUE;
b045b9
         } else {
b045b9
             /* This is ok, but the correct thing is to call delete first,
b045b9
diff --git a/ldap/servers/slapd/back-ldbm/dblayer.c b/ldap/servers/slapd/back-ldbm/dblayer.c
b045b9
index c4c4959..9e557a2 100644
b045b9
--- a/ldap/servers/slapd/back-ldbm/dblayer.c
b045b9
+++ b/ldap/servers/slapd/back-ldbm/dblayer.c
b045b9
@@ -2880,7 +2880,7 @@ dblayer_get_index_file(backend *be, struct attrinfo *a, DB **ppDB, int open_flag
b045b9
     /* it's like a semaphore -- when count > 0, any file handle that's in
b045b9
      * the attrinfo will remain valid from here on.
b045b9
      */
b045b9
-    slapi_atomic_incr(&(a->ai_dblayer_count), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_incr_64(&(a->ai_dblayer_count), __ATOMIC_RELEASE);
b045b9
 
b045b9
     if (a->ai_dblayer && ((dblayer_handle *)(a->ai_dblayer))->dblayer_dbp) {
b045b9
         /* This means that the pointer is valid, so we should return it. */
b045b9
@@ -2938,7 +2938,7 @@ dblayer_get_index_file(backend *be, struct attrinfo *a, DB **ppDB, int open_flag
b045b9
         /* some sort of error -- we didn't open a handle at all.
b045b9
          * decrement the refcount back to where it was.
b045b9
          */
b045b9
-        slapi_atomic_decr(&(a->ai_dblayer_count), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+        slapi_atomic_decr_64(&(a->ai_dblayer_count), __ATOMIC_RELEASE);
b045b9
     }
b045b9
 
b045b9
     return return_value;
b045b9
@@ -2950,7 +2950,7 @@ dblayer_get_index_file(backend *be, struct attrinfo *a, DB **ppDB, int open_flag
b045b9
 int
b045b9
 dblayer_release_index_file(backend *be __attribute__((unused)), struct attrinfo *a, DB *pDB __attribute__((unused)))
b045b9
 {
b045b9
-    slapi_atomic_decr(&(a->ai_dblayer_count), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_decr_64(&(a->ai_dblayer_count), __ATOMIC_RELEASE);
b045b9
     return 0;
b045b9
 }
b045b9
 
b045b9
@@ -3057,7 +3057,7 @@ dblayer_erase_index_file_ex(backend *be, struct attrinfo *a, PRBool use_lock, in
b045b9
 
b045b9
             dblayer_release_index_file(be, a, db);
b045b9
 
b045b9
-            while (slapi_atomic_load(&(a->ai_dblayer_count), __ATOMIC_ACQUIRE, ATOMIC_LONG) > 0) {
b045b9
+            while (slapi_atomic_load_64(&(a->ai_dblayer_count), __ATOMIC_ACQUIRE) > 0) {
b045b9
                 /* someone is using this index file */
b045b9
                 /* ASSUMPTION: you have already set the INDEX_OFFLINE flag, because
b045b9
                  * you intend to mess with this index.  therefore no new requests
b045b9
diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c
b045b9
index 289a149..fbbc8fa 100644
b045b9
--- a/ldap/servers/slapd/entry.c
b045b9
+++ b/ldap/servers/slapd/entry.c
b045b9
@@ -2249,14 +2249,14 @@ static int32_t g_virtual_watermark = 0; /* good enough to init */
b045b9
 int
b045b9
 slapi_entry_vattrcache_watermark_isvalid(const Slapi_Entry *e)
b045b9
 {
b045b9
-    return e->e_virtual_watermark == slapi_atomic_load(&g_virtual_watermark, __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return e->e_virtual_watermark == slapi_atomic_load_32(&g_virtual_watermark, __ATOMIC_ACQUIRE);
b045b9
 
b045b9
 }
b045b9
 
b045b9
 void
b045b9
 slapi_entry_vattrcache_watermark_set(Slapi_Entry *e)
b045b9
 {
b045b9
-    e->e_virtual_watermark = slapi_atomic_load(&g_virtual_watermark, __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    e->e_virtual_watermark = slapi_atomic_load_32(&g_virtual_watermark, __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 void
b045b9
@@ -2269,8 +2269,8 @@ void
b045b9
 slapi_entrycache_vattrcache_watermark_invalidate()
b045b9
 {
b045b9
     /* Make sure the value is never 0 */
b045b9
-    if (slapi_atomic_incr(&g_virtual_watermark, __ATOMIC_RELEASE, ATOMIC_INT) == 0) {
b045b9
-        slapi_atomic_incr(&g_virtual_watermark, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    if (slapi_atomic_incr_32(&g_virtual_watermark, __ATOMIC_RELEASE) == 0) {
b045b9
+        slapi_atomic_incr_32(&g_virtual_watermark, __ATOMIC_RELEASE);
b045b9
     }
b045b9
 }
b045b9
 
b045b9
diff --git a/ldap/servers/slapd/libglobs.c b/ldap/servers/slapd/libglobs.c
b045b9
index 4c54cf7..1ba3000 100644
b045b9
--- a/ldap/servers/slapd/libglobs.c
b045b9
+++ b/ldap/servers/slapd/libglobs.c
b045b9
@@ -1335,19 +1335,19 @@ static uint64_t active_threads = 0;
b045b9
 void
b045b9
 g_incr_active_threadcnt(void)
b045b9
 {
b045b9
-    slapi_atomic_incr(&active_threads, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_incr_64(&active_threads, __ATOMIC_RELEASE);
b045b9
 }
b045b9
 
b045b9
 void
b045b9
 g_decr_active_threadcnt(void)
b045b9
 {
b045b9
-    slapi_atomic_decr(&active_threads, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_decr_64(&active_threads, __ATOMIC_RELEASE);
b045b9
 }
b045b9
 
b045b9
 uint64_t
b045b9
 g_get_active_threadcnt(void)
b045b9
 {
b045b9
-    return slapi_atomic_load(&active_threads, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    return slapi_atomic_load_64(&active_threads, __ATOMIC_RELEASE);
b045b9
 }
b045b9
 
b045b9
 /*
b045b9
@@ -1936,7 +1936,7 @@ config_set_ndn_cache_max_size(const char *attrname, char *value, char *errorbuf,
b045b9
         size = NDN_DEFAULT_SIZE;
b045b9
     }
b045b9
     if (apply) {
b045b9
-        slapi_atomic_store(&(slapdFrontendConfig->ndn_cache_max_size), &size, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+        slapi_atomic_store_64(&(slapdFrontendConfig->ndn_cache_max_size), size, __ATOMIC_RELEASE);
b045b9
     }
b045b9
 
b045b9
     return retVal;
b045b9
@@ -3476,7 +3476,7 @@ int32_t
b045b9
 config_get_dynamic_plugins(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->dynamic_plugins), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->dynamic_plugins), __ATOMIC_ACQUIRE);
b045b9
 
b045b9
 }
b045b9
 
b045b9
@@ -3499,7 +3499,7 @@ int32_t
b045b9
 config_get_cn_uses_dn_syntax_in_dns()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->cn_uses_dn_syntax_in_dns), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->cn_uses_dn_syntax_in_dns), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
@@ -3544,7 +3544,7 @@ config_set_onoff(const char *attrname, char *value, int32_t *configvalue, char *
b045b9
         newval = LDAP_OFF;
b045b9
     }
b045b9
 
b045b9
-    slapi_atomic_store(configvalue, &newval, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(configvalue, newval, __ATOMIC_RELEASE);
b045b9
 
b045b9
     return retVal;
b045b9
 }
b045b9
@@ -3916,7 +3916,7 @@ config_set_threadnumber(const char *attrname, char *value, char *errorbuf, int a
b045b9
         retVal = LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
     if (apply) {
b045b9
-        slapi_atomic_store(&(slapdFrontendConfig->threadnumber), &threadnum, __ATOMIC_RELAXED, ATOMIC_INT);
b045b9
+        slapi_atomic_store_32(&(slapdFrontendConfig->threadnumber), threadnum, __ATOMIC_RELAXED);
b045b9
     }
b045b9
     return retVal;
b045b9
 }
b045b9
@@ -3925,7 +3925,7 @@ int
b045b9
 config_set_maxthreadsperconn(const char *attrname, char *value, char *errorbuf, int apply)
b045b9
 {
b045b9
     int retVal = LDAP_SUCCESS;
b045b9
-    long maxthreadnum = 0;
b045b9
+    int32_t maxthreadnum = 0;
b045b9
     char *endp = NULL;
b045b9
 
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
@@ -3935,7 +3935,7 @@ config_set_maxthreadsperconn(const char *attrname, char *value, char *errorbuf,
b045b9
     }
b045b9
 
b045b9
     errno = 0;
b045b9
-    maxthreadnum = strtol(value, &endp, 10);
b045b9
+    maxthreadnum = (int32_t)strtol(value, &endp, 10);
b045b9
 
b045b9
     if (*endp != '\0' || errno == ERANGE || maxthreadnum < 1 || maxthreadnum > 65535) {
b045b9
         slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
b045b9
@@ -3945,7 +3945,7 @@ config_set_maxthreadsperconn(const char *attrname, char *value, char *errorbuf,
b045b9
     }
b045b9
 
b045b9
     if (apply) {
b045b9
-        slapi_atomic_store(&(slapdFrontendConfig->maxthreadsperconn), &maxthreadnum, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+        slapi_atomic_store_32(&(slapdFrontendConfig->maxthreadsperconn), maxthreadnum, __ATOMIC_RELEASE);
b045b9
     }
b045b9
     return retVal;
b045b9
 }
b045b9
@@ -4083,7 +4083,7 @@ int
b045b9
 config_set_ioblocktimeout(const char *attrname, char *value, char *errorbuf, int apply)
b045b9
 {
b045b9
     int retVal = LDAP_SUCCESS;
b045b9
-    long nValue = 0;
b045b9
+    int32_t nValue = 0;
b045b9
     char *endp = NULL;
b045b9
 
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
@@ -4093,7 +4093,7 @@ config_set_ioblocktimeout(const char *attrname, char *value, char *errorbuf, int
b045b9
     }
b045b9
 
b045b9
     errno = 0;
b045b9
-    nValue = strtol(value, &endp, 10);
b045b9
+    nValue = (int32_t)strtol(value, &endp, 10);
b045b9
 
b045b9
     if (*endp != '\0' || errno == ERANGE || nValue < 0) {
b045b9
         slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE, "%s: invalid value \"%s\", I/O block timeout must range from 0 to %lld",
b045b9
@@ -4103,7 +4103,7 @@ config_set_ioblocktimeout(const char *attrname, char *value, char *errorbuf, int
b045b9
     }
b045b9
 
b045b9
     if (apply) {
b045b9
-        slapi_atomic_store(&(slapdFrontendConfig->ioblocktimeout), &nValue, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+        slapi_atomic_store_32(&(slapdFrontendConfig->ioblocktimeout), nValue, __ATOMIC_RELEASE);
b045b9
     }
b045b9
     return retVal;
b045b9
 }
b045b9
@@ -4607,7 +4607,7 @@ int32_t
b045b9
 config_get_sasl_mapping_fallback()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->sasl_mapping_fallback), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->sasl_mapping_fallback), __ATOMIC_ACQUIRE);
b045b9
 
b045b9
 }
b045b9
 
b045b9
@@ -4615,14 +4615,14 @@ int32_t
b045b9
 config_get_disk_monitoring()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->disk_monitoring), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->disk_monitoring), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_disk_logging_critical()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->disk_logging_critical), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->disk_logging_critical), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int
b045b9
@@ -4669,14 +4669,14 @@ int32_t
b045b9
 config_get_ldapi_switch()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ldapi_switch), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ldapi_switch), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_ldapi_bind_switch()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ldapi_bind_switch), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ldapi_bind_switch), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 char *
b045b9
@@ -4695,7 +4695,7 @@ int
b045b9
 config_get_ldapi_map_entries()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ldapi_map_entries), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ldapi_map_entries), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 char *
b045b9
@@ -4765,7 +4765,7 @@ int32_t
b045b9
 config_get_slapi_counters()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->slapi_counters), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->slapi_counters), __ATOMIC_ACQUIRE);
b045b9
 
b045b9
 }
b045b9
 
b045b9
@@ -4948,7 +4948,7 @@ int32_t
b045b9
 config_get_pw_change(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_change), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_change), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 
b045b9
@@ -4956,7 +4956,7 @@ int32_t
b045b9
 config_get_pw_history(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_history), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_history), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 
b045b9
@@ -4964,21 +4964,21 @@ int32_t
b045b9
 config_get_pw_must_change(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_must_change), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_must_change), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_allow_hashed_pw(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->allow_hashed_pw), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->allow_hashed_pw), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_pw_syntax(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_syntax), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_syntax), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 
b045b9
@@ -5167,21 +5167,21 @@ int32_t
b045b9
 config_get_pw_is_global_policy(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_is_global_policy), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_is_global_policy), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_pw_is_legacy_policy(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_is_legacy), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_is_legacy), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_pw_exp(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_exp), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_exp), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 
b045b9
@@ -5189,14 +5189,14 @@ int32_t
b045b9
 config_get_pw_unlock(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_unlock), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_unlock), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_pw_lockout()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->pw_policy.pw_lockout), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->pw_policy.pw_lockout), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int
b045b9
@@ -5216,112 +5216,112 @@ int32_t
b045b9
 config_get_lastmod()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->lastmod), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->lastmod), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_enquote_sup_oc()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->enquote_sup_oc), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->enquote_sup_oc), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_nagle(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->nagle), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->nagle), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_accesscontrol(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->accesscontrol), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->accesscontrol), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_return_exact_case(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->return_exact_case), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->return_exact_case), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_result_tweak(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->result_tweak), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->result_tweak), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_moddn_aci(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->moddn_aci), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->moddn_aci), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_security(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->security), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->security), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 slapi_config_get_readonly(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->readonly), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->readonly), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_schemacheck(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->schemacheck), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->schemacheck), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_schemamod(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->schemamod), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->schemamod), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_syntaxcheck(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->syntaxcheck), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->syntaxcheck), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_syntaxlogging(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->syntaxlogging), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->syntaxlogging), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_dn_validate_strict(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->dn_validate_strict), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->dn_validate_strict), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_ds4_compatible_schema(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ds4_compatible_schema), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ds4_compatible_schema), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_schema_ignore_trailing_spaces(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->schema_ignore_trailing_spaces), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->schema_ignore_trailing_spaces), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 char *
b045b9
@@ -5405,7 +5405,7 @@ config_get_threadnumber(void)
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
     int32_t retVal;
b045b9
 
b045b9
-    retVal = slapi_atomic_load(&(slapdFrontendConfig->threadnumber), __ATOMIC_RELAXED, ATOMIC_INT);
b045b9
+    retVal = slapi_atomic_load_32(&(slapdFrontendConfig->threadnumber), __ATOMIC_RELAXED);
b045b9
 
b045b9
     if (retVal <= 0) {
b045b9
         retVal = util_get_hardware_threads();
b045b9
@@ -5423,7 +5423,7 @@ int32_t
b045b9
 config_get_maxthreadsperconn()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->maxthreadsperconn), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->maxthreadsperconn), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int
b045b9
@@ -5455,7 +5455,7 @@ int32_t
b045b9
 config_get_ioblocktimeout()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ioblocktimeout), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ioblocktimeout), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int
b045b9
@@ -5772,21 +5772,21 @@ int32_t
b045b9
 config_get_unauth_binds_switch(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->allow_unauth_binds), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->allow_unauth_binds), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_require_secure_binds(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->require_secure_binds), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->require_secure_binds), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_anon_access_switch(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->allow_anon_access), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->allow_anon_access), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int
b045b9
@@ -6028,7 +6028,7 @@ int32_t
b045b9
 config_get_minssf_exclude_rootdse()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->minssf_exclude_rootdse), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->minssf_exclude_rootdse), __ATOMIC_ACQUIRE);
b045b9
 
b045b9
 }
b045b9
 
b045b9
@@ -6057,7 +6057,7 @@ config_set_max_filter_nest_level(const char *attrname, char *value, char *errorb
b045b9
         return retVal;
b045b9
     }
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->max_filter_nest_level), &level, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->max_filter_nest_level), level, __ATOMIC_RELEASE);
b045b9
     return retVal;
b045b9
 }
b045b9
 
b045b9
@@ -6065,28 +6065,28 @@ int32_t
b045b9
 config_get_max_filter_nest_level()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->max_filter_nest_level), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->max_filter_nest_level), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 uint64_t
b045b9
 config_get_ndn_cache_size()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ndn_cache_max_size), __ATOMIC_ACQUIRE, ATOMIC_LONG);
b045b9
+    return slapi_atomic_load_64(&(slapdFrontendConfig->ndn_cache_max_size), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_ndn_cache_enabled()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ndn_cache_enabled), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ndn_cache_enabled), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_return_orig_type_switch()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->return_orig_type), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->return_orig_type), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 char *
b045b9
@@ -6788,7 +6788,7 @@ int32_t
b045b9
 config_get_force_sasl_external(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->force_sasl_external), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->force_sasl_external), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
@@ -6810,7 +6810,7 @@ int32_t
b045b9
 config_get_entryusn_global(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->entryusn_global), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->entryusn_global), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
@@ -7048,21 +7048,21 @@ int32_t
b045b9
 config_get_enable_turbo_mode(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->enable_turbo_mode), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->enable_turbo_mode), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_connection_nocanon(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->connection_nocanon), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->connection_nocanon), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_plugin_logging(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->plugin_logging), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->plugin_logging), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
@@ -7075,21 +7075,21 @@ int32_t
b045b9
 config_get_unhashed_pw_switch()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->unhashed_pw_switch), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->unhashed_pw_switch), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_ignore_time_skew(void)
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->ignore_time_skew), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->ignore_time_skew), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
 config_get_global_backend_lock()
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    return slapi_atomic_load(&(slapdFrontendConfig->global_backend_lock), __ATOMIC_ACQUIRE, ATOMIC_INT);
b045b9
+    return slapi_atomic_load_32(&(slapdFrontendConfig->global_backend_lock), __ATOMIC_ACQUIRE);
b045b9
 }
b045b9
 
b045b9
 int32_t
b045b9
@@ -7185,7 +7185,7 @@ config_set_connection_buffer(const char *attrname, char *value, char *errorbuf,
b045b9
     }
b045b9
 
b045b9
     val = atoi(value);
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->connection_buffer), &val, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->connection_buffer), val, __ATOMIC_RELEASE);
b045b9
 
b045b9
     return retVal;
b045b9
 }
b045b9
@@ -7209,7 +7209,7 @@ config_set_listen_backlog_size(const char *attrname, char *value, char *errorbuf
b045b9
     }
b045b9
 
b045b9
     if (apply) {
b045b9
-        slapi_atomic_store(&(slapdFrontendConfig->listen_backlog_size), &size, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+        slapi_atomic_store_32(&(slapdFrontendConfig->listen_backlog_size), size, __ATOMIC_RELEASE);
b045b9
     }
b045b9
     return LDAP_SUCCESS;
b045b9
 }
b045b9
@@ -7622,7 +7622,7 @@ config_set_accesslog_enabled(int value)
b045b9
     char errorbuf[SLAPI_DSE_RETURNTEXT_SIZE];
b045b9
     errorbuf[0] = '\0';
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->accesslog_logging_enabled), &value, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->accesslog_logging_enabled), value, __ATOMIC_RELEASE);
b045b9
     if (value) {
b045b9
         log_set_logging(CONFIG_ACCESSLOG_LOGGING_ENABLED_ATTRIBUTE, "on", SLAPD_ACCESS_LOG, errorbuf, CONFIG_APPLY);
b045b9
     } else {
b045b9
@@ -7640,7 +7640,7 @@ config_set_auditlog_enabled(int value)
b045b9
     char errorbuf[SLAPI_DSE_RETURNTEXT_SIZE];
b045b9
     errorbuf[0] = '\0';
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->auditlog_logging_enabled), &value, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->auditlog_logging_enabled), value, __ATOMIC_RELEASE);
b045b9
     if (value) {
b045b9
         log_set_logging(CONFIG_AUDITLOG_LOGGING_ENABLED_ATTRIBUTE, "on", SLAPD_AUDIT_LOG, errorbuf, CONFIG_APPLY);
b045b9
     } else {
b045b9
@@ -7658,7 +7658,7 @@ config_set_auditfaillog_enabled(int value)
b045b9
     char errorbuf[SLAPI_DSE_RETURNTEXT_SIZE];
b045b9
     errorbuf[0] = '\0';
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->auditfaillog_logging_enabled), &value, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->auditfaillog_logging_enabled), value, __ATOMIC_RELEASE);
b045b9
     if (value) {
b045b9
         log_set_logging(CONFIG_AUDITFAILLOG_LOGGING_ENABLED_ATTRIBUTE, "on", SLAPD_AUDITFAIL_LOG, errorbuf, CONFIG_APPLY);
b045b9
     } else {
b045b9
@@ -7736,7 +7736,7 @@ config_set_malloc_mxfast(const char *attrname, char *value, char *errorbuf, int
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
     int max = 80 * (sizeof(size_t) / 4);
b045b9
-    int mxfast;
b045b9
+    int32_t mxfast;
b045b9
     char *endp = NULL;
b045b9
 
b045b9
     if (config_value_is_null(attrname, value, errorbuf, 0)) {
b045b9
@@ -7749,7 +7749,7 @@ config_set_malloc_mxfast(const char *attrname, char *value, char *errorbuf, int
b045b9
                               value, CONFIG_MALLOC_MXFAST, max);
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->malloc_mxfast), &mxfast, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->malloc_mxfast), mxfast, __ATOMIC_RELEASE);
b045b9
 
b045b9
     if ((mxfast >= 0) && (mxfast <= max)) {
b045b9
         mallopt(M_MXFAST, mxfast);
b045b9
@@ -7775,7 +7775,7 @@ int
b045b9
 config_set_malloc_trim_threshold(const char *attrname, char *value, char *errorbuf, int apply __attribute__((unused)))
b045b9
 {
b045b9
     slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
b045b9
-    int trim_threshold;
b045b9
+    int32_t trim_threshold;
b045b9
     char *endp = NULL;
b045b9
 
b045b9
     if (config_value_is_null(attrname, value, errorbuf, 0)) {
b045b9
@@ -7789,7 +7789,7 @@ config_set_malloc_trim_threshold(const char *attrname, char *value, char *errorb
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->malloc_trim_threshold), &trim_threshold, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->malloc_trim_threshold), trim_threshold, __ATOMIC_RELEASE);
b045b9
 
b045b9
     if (trim_threshold >= -1) {
b045b9
         mallopt(M_TRIM_THRESHOLD, trim_threshold);
b045b9
@@ -7836,7 +7836,7 @@ config_set_malloc_mmap_threshold(const char *attrname, char *value, char *errorb
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
 
b045b9
-    slapi_atomic_store(&(slapdFrontendConfig->malloc_mmap_threshold), &mmap_threshold, __ATOMIC_RELEASE, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&(slapdFrontendConfig->malloc_mmap_threshold), mmap_threshold, __ATOMIC_RELEASE);
b045b9
 
b045b9
     if ((mmap_threshold >= 0) && (mmap_threshold <= max)) {
b045b9
         mallopt(M_MMAP_THRESHOLD, mmap_threshold);
b045b9
diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c
b045b9
index 4d44c87..e16d89c 100644
b045b9
--- a/ldap/servers/slapd/log.c
b045b9
+++ b/ldap/servers/slapd/log.c
b045b9
@@ -4942,13 +4942,12 @@ static LogBufferInfo *
b045b9
 log_create_buffer(size_t sz)
b045b9
 {
b045b9
     LogBufferInfo *lbi;
b045b9
-    uint64_t init_val = 0;
b045b9
 
b045b9
     lbi = (LogBufferInfo *)slapi_ch_malloc(sizeof(LogBufferInfo));
b045b9
     lbi->top = (char *)slapi_ch_malloc(sz);
b045b9
     lbi->current = lbi->top;
b045b9
     lbi->maxsize = sz;
b045b9
-    slapi_atomic_store(&(lbi->refcount), &init_val, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_store_64(&(lbi->refcount), 0, __ATOMIC_RELEASE);
b045b9
     return lbi;
b045b9
 }
b045b9
 
b045b9
@@ -5010,7 +5009,7 @@ log_append_buffer2(time_t tnl, LogBufferInfo *lbi, char *msg1, size_t size1, cha
b045b9
     insert_point = lbi->current;
b045b9
     lbi->current += size;
b045b9
     /* Increment the copy refcount */
b045b9
-    slapi_atomic_incr(&(lbi->refcount), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_incr_64(&(lbi->refcount), __ATOMIC_RELEASE);
b045b9
     PR_Unlock(lbi->lock);
b045b9
 
b045b9
     /* Now we can copy without holding the lock */
b045b9
@@ -5018,7 +5017,7 @@ log_append_buffer2(time_t tnl, LogBufferInfo *lbi, char *msg1, size_t size1, cha
b045b9
     memcpy(insert_point + size1, msg2, size2);
b045b9
 
b045b9
     /* Decrement the copy refcount */
b045b9
-    slapi_atomic_decr(&(lbi->refcount), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_decr_64(&(lbi->refcount), __ATOMIC_RELEASE);
b045b9
 
b045b9
     /* If we are asked to sync to disk immediately, do so */
b045b9
     if (!slapdFrontendConfig->accesslogbuffering) {
b045b9
@@ -5038,7 +5037,7 @@ log_flush_buffer(LogBufferInfo *lbi, int type, int sync_now)
b045b9
     if (type == SLAPD_ACCESS_LOG) {
b045b9
 
b045b9
         /* It is only safe to flush once any other threads which are copying are finished */
b045b9
-        while (slapi_atomic_load(&(lbi->refcount), __ATOMIC_ACQUIRE, ATOMIC_LONG) > 0) {
b045b9
+        while (slapi_atomic_load_64(&(lbi->refcount), __ATOMIC_ACQUIRE) > 0) {
b045b9
             /* It's ok to sleep for a while because we only flush every second or so */
b045b9
             DS_Sleep(PR_MillisecondsToInterval(1));
b045b9
         }
b045b9
diff --git a/ldap/servers/slapd/mapping_tree.c b/ldap/servers/slapd/mapping_tree.c
b045b9
index 6621ceb..8cc5318 100644
b045b9
--- a/ldap/servers/slapd/mapping_tree.c
b045b9
+++ b/ldap/servers/slapd/mapping_tree.c
b045b9
@@ -1647,7 +1647,7 @@ mapping_tree_init()
b045b9
 
b045b9
     /* we call this function from a single thread, so it should be ok */
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown has been detected */
b045b9
         return 0;
b045b9
     }
b045b9
@@ -1759,8 +1759,6 @@ mtn_free_node(mapping_tree_node **node)
b045b9
 void
b045b9
 mapping_tree_free()
b045b9
 {
b045b9
-    int init_val = 1;
b045b9
-
b045b9
     /* unregister dse callbacks */
b045b9
     slapi_config_remove_callback(SLAPI_OPERATION_MODIFY, DSE_FLAG_PREOP, MAPPING_TREE_BASE_DN, LDAP_SCOPE_BASE, "(objectclass=*)", mapping_tree_entry_modify_callback);
b045b9
     slapi_config_remove_callback(SLAPI_OPERATION_ADD, DSE_FLAG_PREOP, MAPPING_TREE_BASE_DN, LDAP_SCOPE_BASE, "(objectclass=*)", mapping_tree_entry_add_callback);
b045b9
@@ -1773,7 +1771,7 @@ mapping_tree_free()
b045b9
     slapi_unregister_backend_state_change_all();
b045b9
     /* recursively free tree nodes */
b045b9
     mtn_free_node(&mapping_tree_root);
b045b9
-    slapi_atomic_store(&mapping_tree_freed, &init_val, __ATOMIC_RELAXED, ATOMIC_INT);
b045b9
+    slapi_atomic_store_32(&mapping_tree_freed, 1, __ATOMIC_RELAXED);
b045b9
 }
b045b9
 
b045b9
 /* This function returns the first node to parse when a search is done
b045b9
@@ -2024,7 +2022,7 @@ slapi_dn_write_needs_referral(Slapi_DN *target_sdn, Slapi_Entry **referral)
b045b9
     mapping_tree_node *target_node = NULL;
b045b9
     int ret = 0;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         goto done;
b045b9
     }
b045b9
@@ -2095,7 +2093,7 @@ slapi_mapping_tree_select(Slapi_PBlock *pb, Slapi_Backend **be, Slapi_Entry **re
b045b9
     int fixup = 0;
b045b9
 
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
@@ -2200,7 +2198,7 @@ slapi_mapping_tree_select_all(Slapi_PBlock *pb, Slapi_Backend **be_list, Slapi_E
b045b9
     int flag_partial_result = 0;
b045b9
     int op_type;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
 
b045b9
@@ -2360,7 +2358,7 @@ slapi_mapping_tree_select_and_check(Slapi_PBlock *pb, char *newdn, Slapi_Backend
b045b9
     int ret;
b045b9
     int need_unlock = 0;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
 
b045b9
@@ -2526,7 +2524,7 @@ mtn_get_be(mapping_tree_node *target_node, Slapi_PBlock *pb, Slapi_Backend **be,
b045b9
     int flag_stop = 0;
b045b9
     struct slapi_componentid *cid = NULL;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shut down detected */
b045b9
         return LDAP_OPERATIONS_ERROR;
b045b9
     }
b045b9
@@ -2714,7 +2712,7 @@ best_matching_child(mapping_tree_node *parent,
b045b9
     mapping_tree_node *highest_match_node = NULL;
b045b9
     mapping_tree_node *current;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
@@ -2741,7 +2739,7 @@ mtn_get_mapping_tree_node_by_entry(mapping_tree_node *node, const Slapi_DN *dn)
b045b9
 {
b045b9
     mapping_tree_node *found_node = NULL;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
@@ -2784,7 +2782,7 @@ slapi_get_mapping_tree_node_by_dn(const Slapi_DN *dn)
b045b9
     mapping_tree_node *current_best_match = mapping_tree_root;
b045b9
     mapping_tree_node *next_best_match = mapping_tree_root;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
@@ -2818,7 +2816,7 @@ get_mapping_tree_node_by_name(mapping_tree_node *node, char *be_name)
b045b9
     int i;
b045b9
     mapping_tree_node *found_node = NULL;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
@@ -2865,7 +2863,7 @@ slapi_get_mapping_tree_node_configdn(const Slapi_DN *root)
b045b9
 {
b045b9
     char *dn = NULL;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
@@ -2892,7 +2890,7 @@ slapi_get_mapping_tree_node_configsdn(const Slapi_DN *root)
b045b9
     char *dn = NULL;
b045b9
     Slapi_DN *sdn = NULL;
b045b9
 
b045b9
-    if (slapi_atomic_load(&mapping_tree_freed, __ATOMIC_RELAXED, ATOMIC_INT)) {
b045b9
+    if (slapi_atomic_load_32(&mapping_tree_freed, __ATOMIC_RELAXED)) {
b045b9
         /* shutdown detected */
b045b9
         return NULL;
b045b9
     }
b045b9
diff --git a/ldap/servers/slapd/object.c b/ldap/servers/slapd/object.c
b045b9
index 6a1a9a5..8e55a16 100644
b045b9
--- a/ldap/servers/slapd/object.c
b045b9
+++ b/ldap/servers/slapd/object.c
b045b9
@@ -43,12 +43,11 @@ Object *
b045b9
 object_new(void *user_data, FNFree destructor)
b045b9
 {
b045b9
     Object *o;
b045b9
-    uint64_t init_val = 1;
b045b9
 
b045b9
     o = (object *)slapi_ch_malloc(sizeof(object));
b045b9
     o->destructor = destructor;
b045b9
     o->data = user_data;
b045b9
-    slapi_atomic_store(&(o->refcnt), &init_val, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_store_64(&(o->refcnt), 1, __ATOMIC_RELEASE);
b045b9
     return o;
b045b9
 }
b045b9
 
b045b9
@@ -62,7 +61,7 @@ void
b045b9
 object_acquire(Object *o)
b045b9
 {
b045b9
     PR_ASSERT(NULL != o);
b045b9
-    slapi_atomic_incr(&(o->refcnt), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_incr_64(&(o->refcnt), __ATOMIC_RELEASE);
b045b9
 }
b045b9
 
b045b9
 
b045b9
@@ -77,7 +76,7 @@ object_release(Object *o)
b045b9
     PRInt32 refcnt_after_release;
b045b9
 
b045b9
     PR_ASSERT(NULL != o);
b045b9
-    refcnt_after_release = slapi_atomic_decr(&(o->refcnt), __ATOMIC_ACQ_REL, ATOMIC_LONG);
b045b9
+    refcnt_after_release = slapi_atomic_decr_64(&(o->refcnt), __ATOMIC_ACQ_REL);
b045b9
     if (refcnt_after_release == 0) {
b045b9
         /* Object can be destroyed */
b045b9
         if (o->destructor)
b045b9
diff --git a/ldap/servers/slapd/psearch.c b/ldap/servers/slapd/psearch.c
b045b9
index 70c530b..e0dd2bf 100644
b045b9
--- a/ldap/servers/slapd/psearch.c
b045b9
+++ b/ldap/servers/slapd/psearch.c
b045b9
@@ -134,7 +134,7 @@ ps_stop_psearch_system()
b045b9
     if (PS_IS_INITIALIZED()) {
b045b9
         PSL_LOCK_WRITE();
b045b9
         for (ps = psearch_list->pl_head; NULL != ps; ps = ps->ps_next) {
b045b9
-            slapi_atomic_incr(&(ps->ps_complete), __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+            slapi_atomic_incr_64(&(ps->ps_complete), __ATOMIC_RELEASE);
b045b9
         }
b045b9
         PSL_UNLOCK_WRITE();
b045b9
         ps_wakeup_all();
b045b9
@@ -285,7 +285,7 @@ ps_send_results(void *arg)
b045b9
 
b045b9
     PR_Lock(psearch_list->pl_cvarlock);
b045b9
 
b045b9
-    while ((conn_acq_flag == 0) && slapi_atomic_load(&(ps->ps_complete), __ATOMIC_ACQUIRE, ATOMIC_LONG) == 0) {
b045b9
+    while ((conn_acq_flag == 0) && slapi_atomic_load_64(&(ps->ps_complete), __ATOMIC_ACQUIRE) == 0) {
b045b9
         /* Check for an abandoned operation */
b045b9
         if (pb_op == NULL || slapi_op_abandoned(ps->ps_pblock)) {
b045b9
             slapi_log_err(SLAPI_LOG_CONNS, "ps_send_results",
b045b9
@@ -427,7 +427,6 @@ static PSearch *
b045b9
 psearch_alloc(void)
b045b9
 {
b045b9
     PSearch *ps;
b045b9
-    uint64_t init_val = 0;
b045b9
 
b045b9
     ps = (PSearch *)slapi_ch_calloc(1, sizeof(PSearch));
b045b9
 
b045b9
@@ -438,7 +437,7 @@ psearch_alloc(void)
b045b9
         slapi_ch_free((void **)&ps);
b045b9
         return (NULL);
b045b9
     }
b045b9
-    slapi_atomic_store(&(ps->ps_complete), &init_val, __ATOMIC_RELEASE, ATOMIC_LONG);
b045b9
+    slapi_atomic_store_64(&(ps->ps_complete), 0, __ATOMIC_RELEASE);
b045b9
     ps->ps_eq_head = ps->ps_eq_tail = (PSEQNode *)NULL;
b045b9
     ps->ps_lasttime = (time_t)0L;
b045b9
     ps->ps_next = NULL;
b045b9
diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h
b045b9
index c434add..4566202 100644
b045b9
--- a/ldap/servers/slapd/slapi-plugin.h
b045b9
+++ b/ldap/servers/slapd/slapi-plugin.h
b045b9
@@ -8202,56 +8202,87 @@ void slapi_operation_time_initiated(Slapi_Operation *o, struct timespec *initiat
b045b9
  */
b045b9
 #endif
b045b9
 
b045b9
-/* See: https://gcc.gnu.org/ml/gcc/2016-11/txt6ZlA_JS27i.txt */
b045b9
-#define ATOMIC_GENERIC  0
b045b9
-#define ATOMIC_INT      4
b045b9
-#define ATOMIC_LONG     8
b045b9
-#define ATOMIC_INT128  16  /* Future */
b045b9
+/**
b045b9
+ * Store a 32bit integral value atomicly
b045b9
+ *
b045b9
+ * \param ptr - integral pointer
b045b9
+ * \param val - pointer to integral value (use integral type int32_t with ATOMIC_INT, or uint64_t
b045b9
+ * with ATOMIC_LONG & ATOMIC_GENERIC)
b045b9
+ * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
+ * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
+ */
b045b9
+void slapi_atomic_store_32(int32_t *ptr, int32_t val, int memorder);
b045b9
 
b045b9
 /**
b045b9
- * Store an integral value atomicly
b045b9
+ * Store a 64bit integral value atomicly
b045b9
  *
b045b9
  * \param ptr - integral pointer
b045b9
  * \param val - pointer to integral value (use integral type int32_t with ATOMIC_INT, or uint64_t
b045b9
  * with ATOMIC_LONG & ATOMIC_GENERIC)
b045b9
  * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
  * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
- * \param type - "ptr" type: ATOMIC_GENERIC, ATOMIC_INT, or ATOMIC_LONG
b045b9
  */
b045b9
-void slapi_atomic_store(void *ptr, void *val, int memorder, int type);
b045b9
+void slapi_atomic_store_64(uint64_t *ptr, uint64_t val, int memorder);
b045b9
 
b045b9
 /**
b045b9
- * Get an integral value atomicly
b045b9
+ * Get a 32bit integral value atomicly
b045b9
  *
b045b9
  * \param ptr - integral pointer
b045b9
  * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
  * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
- * \param type - "ptr" type: ATOMIC_GENERIC, ATOMIC_INT, or ATOMIC_LONG
b045b9
  * \return -
b045b9
  */
b045b9
-uint64_t slapi_atomic_load(void *ptr, int memorder, int type);
b045b9
+int32_t slapi_atomic_load_32(int32_t *ptr, int memorder);
b045b9
 
b045b9
 /**
b045b9
- * Increment integral atomicly
b045b9
+ * Get a 64bit integral value atomicly
b045b9
+ *
b045b9
+ * \param ptr - integral pointer
b045b9
+ * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
+ * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
+ * \return ptr value
b045b9
+ */
b045b9
+uint64_t slapi_atomic_load_64(uint64_t *ptr, int memorder);
b045b9
+
b045b9
+/**
b045b9
+ * Increment a 32bit integral atomicly
b045b9
  *
b045b9
  * \param ptr - pointer to integral to increment
b045b9
  * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
  * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
- * \param type - "ptr" type: ATOMIC_GENERIC, ATOMIC_INT, or ATOMIC_LONG
b045b9
  * \return - new value of ptr
b045b9
  */
b045b9
-uint64_t slapi_atomic_incr(void *ptr, int memorder, int type);
b045b9
+int32_t slapi_atomic_incr_32(int32_t *ptr, int memorder);
b045b9
+
b045b9
+/**
b045b9
+ * Increment a 64bitintegral atomicly
b045b9
+ *
b045b9
+ * \param ptr - pointer to integral to increment
b045b9
+ * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
+ * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
+ * \return - new value of ptr
b045b9
+ */
b045b9
+uint64_t slapi_atomic_incr_64(uint64_t *ptr, int memorder);
b045b9
+
b045b9
+/**
b045b9
+ * Decrement a 32bit integral atomicly
b045b9
+ *
b045b9
+ * \param ptr - pointer to integral to decrement
b045b9
+ * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
+ * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
+ * \return - new value of ptr
b045b9
+ */
b045b9
+int32_t slapi_atomic_decr_32(int32_t *ptr, int memorder);
b045b9
 
b045b9
 /**
b045b9
- * Decrement integral atomicly
b045b9
+ * Decrement a 64bitintegral atomicly
b045b9
  *
b045b9
  * \param ptr - pointer to integral to decrement
b045b9
  * \param memorder - __ATOMIC_RELAXED, __ATOMIC_CONSUME, __ATOMIC_ACQUIRE,
b045b9
  * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, __ATOMIC_SEQ_CST
b045b9
- * \param type - "ptr" type: ATOMIC_GENERIC, ATOMIC_INT, or ATOMIC_LONG
b045b9
  * \return - new value of ptr
b045b9
  */
b045b9
-uint64_t slapi_atomic_decr(void *ptr, int memorder, int type);
b045b9
+uint64_t slapi_atomic_decr_64(uint64_t *ptr, int memorder);
b045b9
 
b045b9
 
b045b9
 #ifdef __cplusplus
b045b9
diff --git a/ldap/servers/slapd/slapi_counter.c b/ldap/servers/slapd/slapi_counter.c
b045b9
index 9e705b3..c5cae27 100644
b045b9
--- a/ldap/servers/slapd/slapi_counter.c
b045b9
+++ b/ldap/servers/slapd/slapi_counter.c
b045b9
@@ -295,53 +295,41 @@ slapi_counter_get_value(Slapi_Counter *counter)
b045b9
  * __ATOMIC_RELEASE, __ATOMIC_ACQ_REL, or __ATOMIC_SEQ_CST
b045b9
  *
b045b9
  *     See: https://gcc.gnu.org/onlinedocs/gcc-4.9.2/gcc/_005f_005fatomic-Builtins.html
b045b9
- *
b045b9
- * type_size - ATOMIC_GENERIC, ATOMIC_INT, or ATOMIC_LONG, see slapi-plugin.h for more info
b045b9
- *
b045b9
- * Future:
b045b9
- *    If we need to support ATOMIC_INT128 (not available on 32bit systems):
b045b9
- *         __atomic_store_16((uint64_t *)&ptr, val, memorder);
b045b9
- *         __atomic_load_16((uint64_t *)&ptr, memorder);
b045b9
- *         __atomic_add_fetch_16((uint64_t *)&ptr, 1, memorder);
b045b9
- *         __atomic_sub_fetch_16((uint64_t *)&ptr, 1, memorder);
b045b9
  */
b045b9
 
b045b9
 /*
b045b9
- * "val" must be either int32_t or uint64_t
b045b9
+ * atomic store functions (32bit and 64bit)
b045b9
  */
b045b9
 void
b045b9
-slapi_atomic_store(void *ptr, void *val, int memorder, int type_size)
b045b9
+slapi_atomic_store_32(int32_t *ptr, int32_t val, int memorder)
b045b9
 {
b045b9
 #ifdef ATOMIC_64BIT_OPERATIONS
b045b9
-    if (type_size == ATOMIC_INT) {
b045b9
-        __atomic_store_4((int32_t *)ptr, *(int32_t *)val, memorder);
b045b9
-    } else if (type_size == ATOMIC_LONG) {
b045b9
-        __atomic_store_8((uint64_t *)ptr, *(uint64_t *)val, memorder);
b045b9
-    } else {
b045b9
-        /* ATOMIC_GENERIC or unknown size */
b045b9
-        __atomic_store((uint64_t *)&ptr, (uint64_t *)val, memorder);
b045b9
-    }
b045b9
+    __atomic_store_4(ptr, val, memorder);
b045b9
 #else
b045b9
     PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
-    PR_AtomicSet(pr_ptr, *(PRInt32 *)val);
b045b9
+    PR_AtomicSet(pr_ptr, (PRInt32)val);
b045b9
 #endif
b045b9
 }
b045b9
 
b045b9
-uint64_t
b045b9
-slapi_atomic_load(void *ptr, int memorder, int type_size)
b045b9
+void
b045b9
+slapi_atomic_store_64(uint64_t *ptr, uint64_t val, int memorder)
b045b9
 {
b045b9
 #ifdef ATOMIC_64BIT_OPERATIONS
b045b9
-    uint64_t ret;
b045b9
+    __atomic_store_8(ptr, val, memorder);
b045b9
+#else
b045b9
+    PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
+    PR_AtomicSet(pr_ptr, (PRInt32)val);
b045b9
+#endif
b045b9
+}
b045b9
 
b045b9
-    if (type_size == ATOMIC_INT) {
b045b9
-        return __atomic_load_4((int32_t *)ptr, memorder);
b045b9
-    } else if (type_size == ATOMIC_LONG) {
b045b9
-        return __atomic_load_8((uint64_t *)ptr, memorder);
b045b9
-    } else {
b045b9
-        /* ATOMIC_GENERIC or unknown size */
b045b9
-        __atomic_load((uint64_t *)ptr, &ret, memorder);
b045b9
-        return ret;
b045b9
-    }
b045b9
+/*
b045b9
+ * atomic load functions (32bit and 64bit)
b045b9
+ */
b045b9
+int32_t
b045b9
+slapi_atomic_load_32(int32_t *ptr, int memorder)
b045b9
+{
b045b9
+#ifdef ATOMIC_64BIT_OPERATIONS
b045b9
+    return __atomic_load_4(ptr, memorder);
b045b9
 #else
b045b9
     PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
     return PR_AtomicAdd(pr_ptr, 0);
b045b9
@@ -349,17 +337,24 @@ slapi_atomic_load(void *ptr, int memorder, int type_size)
b045b9
 }
b045b9
 
b045b9
 uint64_t
b045b9
-slapi_atomic_incr(void *ptr, int memorder, int type_size)
b045b9
+slapi_atomic_load_64(uint64_t *ptr, int memorder)
b045b9
 {
b045b9
 #ifdef ATOMIC_64BIT_OPERATIONS
b045b9
-    if (type_size == ATOMIC_INT) {
b045b9
-        return __atomic_add_fetch_4((int32_t *)ptr, 1, memorder);
b045b9
-    } else if (type_size == ATOMIC_LONG) {
b045b9
-        return __atomic_add_fetch_8((uint64_t *)ptr, 1, memorder);
b045b9
-    } else {
b045b9
-        /* ATOMIC_GENERIC or unknown size */
b045b9
-        return __atomic_add_fetch((uint64_t *)ptr, 1, memorder);
b045b9
-    }
b045b9
+    return __atomic_load_8(ptr, memorder);
b045b9
+#else
b045b9
+    PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
+    return PR_AtomicAdd(pr_ptr, 0);
b045b9
+#endif
b045b9
+}
b045b9
+
b045b9
+/*
b045b9
+ * atomic increment functions (32bit and 64bit)
b045b9
+ */
b045b9
+int32_t
b045b9
+slapi_atomic_incr_32(int32_t *ptr, int memorder)
b045b9
+{
b045b9
+#ifdef ATOMIC_64BIT_OPERATIONS
b045b9
+    return __atomic_add_fetch_4(ptr, 1, memorder);
b045b9
 #else
b045b9
     PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
     return PR_AtomicIncrement(pr_ptr);
b045b9
@@ -367,17 +362,35 @@ slapi_atomic_incr(void *ptr, int memorder, int type_size)
b045b9
 }
b045b9
 
b045b9
 uint64_t
b045b9
-slapi_atomic_decr(void *ptr, int memorder, int type_size)
b045b9
+slapi_atomic_incr_64(uint64_t *ptr, int memorder)
b045b9
 {
b045b9
 #ifdef ATOMIC_64BIT_OPERATIONS
b045b9
-    if (type_size == ATOMIC_INT) {
b045b9
-        return __atomic_sub_fetch_4((int32_t *)ptr, 1, memorder);
b045b9
-    } else if (type_size == ATOMIC_LONG) {
b045b9
-        return __atomic_sub_fetch_8((uint64_t *)ptr, 1, memorder);
b045b9
-    } else {
b045b9
-        /* ATOMIC_GENERIC or unknown size */
b045b9
-        return __atomic_sub_fetch((uint64_t *)ptr, 1, memorder);
b045b9
-    }
b045b9
+    return __atomic_add_fetch_8(ptr, 1, memorder);
b045b9
+#else
b045b9
+    PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
+    return PR_AtomicIncrement(pr_ptr);
b045b9
+#endif
b045b9
+}
b045b9
+
b045b9
+/*
b045b9
+ * atomic decrement functions (32bit and 64bit)
b045b9
+ */
b045b9
+int32_t
b045b9
+slapi_atomic_decr_32(int32_t *ptr, int memorder)
b045b9
+{
b045b9
+#ifdef ATOMIC_64BIT_OPERATIONS
b045b9
+    return __atomic_sub_fetch_4(ptr, 1, memorder);
b045b9
+#else
b045b9
+    PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
+    return PR_AtomicDecrement(pr_ptr);
b045b9
+#endif
b045b9
+}
b045b9
+
b045b9
+uint64_t
b045b9
+slapi_atomic_decr_64(uint64_t *ptr, int memorder)
b045b9
+{
b045b9
+#ifdef ATOMIC_64BIT_OPERATIONS
b045b9
+    return __atomic_sub_fetch_8(ptr, 1, memorder);
b045b9
 #else
b045b9
     PRInt32 *pr_ptr = (PRInt32 *)ptr;
b045b9
     return PR_AtomicDecrement(pr_ptr);
b045b9
-- 
b045b9
2.9.5
b045b9