Use correct release semantic in list update.
authorAndreas Schwab <aschwab@redhat.com>
Thu, 16 Jul 2009 16:57:32 +0000 (09:57 -0700)
committerUlrich Drepper <drepper@redhat.com>
Thu, 16 Jul 2009 16:57:32 +0000 (09:57 -0700)
nscd uses lockfree lists and we need to ensure the correct release
semantics is used when adding to the list.

ChangeLog
nscd/cache.c

index 6ddf9a1..a81c5b4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,10 @@
 2009-07-16  Ulrich Drepper  <drepper@redhat.com>
+
+       * nscd/cache.c (cache_add): Use atomic_compare_and_exchange_bool_rel
+       instead of atomic_compare_and_exchange_bool_acq to ensure pointer
+       is written before the list head update.
+       Patch by Andreas Schwab <aschwab@redhat.com>.
+
            Jakub Jelinek  <jakub@redhat.com>
 
        * malloc/malloc.c [ATOMIC_FASTBINS] (_int_free): Make check for
index ab842ef..3e6793d 100644 (file)
@@ -179,7 +179,7 @@ cache_add (int type, const void *key, size_t len, struct datahead *packet,
   /* Put the new entry in the first position.  */
   do
     newp->next = table->head->array[hash];
-  while (atomic_compare_and_exchange_bool_acq (&table->head->array[hash],
+  while (atomic_compare_and_exchange_bool_rel (&table->head->array[hash],
                                               (ref_t) ((char *) newp
                                                        - table->data),
                                               (ref_t) newp->next));