Use C11 atomics instead of atomic_decrement(_val)
authorWilco Dijkstra <wdijkstr@arm.com>
Fri, 9 Sep 2022 13:22:26 +0000 (14:22 +0100)
committerWilco Dijkstra <wdijkstr@arm.com>
Fri, 9 Sep 2022 13:22:26 +0000 (14:22 +0100)
Replace atomic_decrement and atomic_decrement_val with
atomic_fetch_add_relaxed.

Reviewed-by: DJ Delorie <dj@redhat.com>
15 files changed:
htl/pt-create.c
malloc/malloc.c
manual/ipc.texi
manual/llio.texi
nptl/nptl_setxid.c
nptl/pthread_create.c
nscd/nscd-client.h
nscd/nscd_getai.c
nscd/nscd_getgr_r.c
nscd/nscd_gethst_r.c
nscd/nscd_getpw_r.c
nscd/nscd_getserv_r.c
nscd/nscd_helper.c
nscd/nscd_initgroups.c
nscd/nscd_netgroup.c

index ce52ed9..36f138b 100644 (file)
@@ -262,7 +262,7 @@ failed_starting:
     }
 
   __pthread_setid (pthread->thread, NULL);
-  atomic_decrement (&__pthread_total);
+  atomic_fetch_add_relaxed (&__pthread_total, -1);
 failed_sigstate:
   __pthread_sigstate_destroy (pthread);
 failed_setup:
index aea4993..bfe1955 100644 (file)
@@ -3033,7 +3033,7 @@ munmap_chunk (mchunkptr p)
       || __glibc_unlikely (!powerof2 (mem & (pagesize - 1))))
     malloc_printerr ("munmap_chunk(): invalid pointer");
 
-  atomic_decrement (&mp_.n_mmaps);
+  atomic_fetch_add_relaxed (&mp_.n_mmaps, -1);
   atomic_fetch_add_relaxed (&mp_.mmapped_mem, -total_size);
 
   /* If munmap failed the process virtual memory address space is in a
index 081b98f..46c049c 100644 (file)
@@ -89,7 +89,7 @@ by @theglibc{}.
 @c
 @c Given the use atomic operations this function seems
 @c to be AS-safe.  It is AC-unsafe because there is still
-@c a window between atomic_decrement and the pthread_push
+@c a window between atomic_fetch_add_relaxed and the pthread_push
 @c of the handler that undoes that operation.  A cancellation
 @c at that point would fail to remove the process from the
 @c waiters count.
index e55b02d..0dfcdad 100644 (file)
@@ -2569,7 +2569,7 @@ aiocb64}, since the LFS transparently replaces the old interface.
 @c      lll_lock (pd->lock) @asulock @aculock
 @c      atomic_increment ok
 @c      clone ok
-@c      atomic_decrement ok
+@c      atomic_fetch_add_relaxed ok
 @c      atomic_exchange_acq ok
 @c      lll_futex_wake ok
 @c      deallocate_stack dup
index aa863c7..e709822 100644 (file)
@@ -88,7 +88,7 @@ __nptl_setxid_sighandler (int sig, siginfo_t *si, void *ctx)
   self->setxid_futex = 1;
   futex_wake (&self->setxid_futex, 1, FUTEX_PRIVATE);
 
-  if (atomic_decrement_val (&xidcmd->cntr) == 0)
+  if (atomic_fetch_add_relaxed (&xidcmd->cntr, -1) == 1)
     futex_wake ((unsigned int *) &xidcmd->cntr, 1, FUTEX_PRIVATE);
 }
 libc_hidden_def (__nptl_setxid_sighandler)
index 308db65..e7e4ede 100644 (file)
@@ -861,7 +861,7 @@ __pthread_create_2_1 (pthread_t *newthread, const pthread_attr_t *attr,
         NOTES above).  */
 
       /* Oops, we lied for a second.  */
-      atomic_decrement (&__nptl_nthreads);
+      atomic_fetch_add_relaxed (&__nptl_nthreads, -1);
 
       /* Free the resources.  */
       __nptl_deallocate_stack (pd);
index fee2a15..ca9e6de 100644 (file)
@@ -421,7 +421,7 @@ __nscd_drop_map_ref (struct mapped_database *map, int *gc_cycle)
          return -1;
        }
 
-      if (atomic_decrement_val (&map->counter) == 0)
+      if (atomic_fetch_add_relaxed (&map->counter, -1) == 1)
        __nscd_unmap (map);
     }
 
index a99a4d8..8e4650e 100644 (file)
@@ -198,7 +198,7 @@ __nscd_getai (const char *key, struct nscd_ai_result **result, int *h_errnop)
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 3636c03..bde3b58 100644 (file)
@@ -312,7 +312,7 @@ nscd_getgr_r (const char *key, size_t keylen, request_type type,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 9becb62..31d1358 100644 (file)
@@ -440,7 +440,7 @@ nscd_gethst_r (const char *key, size_t keylen, request_type type,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 20986f4..82fdd17 100644 (file)
@@ -225,7 +225,7 @@ nscd_getpw_r (const char *key, size_t keylen, request_type type,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 42b875d..de843b3 100644 (file)
@@ -365,7 +365,7 @@ nscd_getserv_r (const char *crit, size_t critlen, const char *proto,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 8e66fa2..0651817 100644 (file)
@@ -390,7 +390,7 @@ __nscd_get_mapping (request_type type, const char *key,
   struct mapped_database *oldval = *mappedp;
   *mappedp = result;
 
-  if (oldval != NULL && atomic_decrement_val (&oldval->counter) == 0)
+  if (oldval != NULL && atomic_fetch_add_relaxed (&oldval->counter, -1) == 1)
     __nscd_unmap (oldval);
 
   return result;
index dfce76a..47b6deb 100644 (file)
@@ -166,7 +166,7 @@ __nscd_getgrouplist (const char *user, gid_t group, long int *size,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
index 7e51dd3..11b7f32 100644 (file)
@@ -148,7 +148,7 @@ __nscd_setnetgrent (const char *group, struct __netgrent *datap)
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }
@@ -272,7 +272,7 @@ __nscd_innetgr (const char *netgroup, const char *host, const char *user,
       if ((gc_cycle & 1) != 0 || ++nretries == 5 || retval == -1)
        {
          /* nscd is just running gc now.  Disable using the mapping.  */
-         if (atomic_decrement_val (&mapped->counter) == 0)
+         if (atomic_fetch_add_relaxed (&mapped->counter, -1) == 1)
            __nscd_unmap (mapped);
          mapped = NO_MAPPING;
        }