This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch, master, updated. glibc-2.10-156-gbea0ac1
- From: drepper at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 16 Jul 2009 14:25:30 -0000
- Subject: GNU C Library master sources branch, master, updated. glibc-2.10-156-gbea0ac1
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via bea0ac1d8703091294fe5822d982591c849b5458 (commit)
from 55c4ce6885b577e2b29a4de674d4062a6882afe8 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sources.redhat.com/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=bea0ac1d8703091294fe5822d982591c849b5458
commit bea0ac1d8703091294fe5822d982591c849b5458
Author: Jakub Jelinek <jakub@redhat.com>
Date: Thu Jul 16 07:24:50 2009 -0700
Use rel semantics of cas instead of acq semantics with full barrier before it in _int_free
The following patch fixes catomic_compare_and_exchange_*_rel definitions
(which were never used and weren't correct) and uses
catomic_compare_and_exchange_val_rel in _int_free. Comparing to the
pre-2009-07-02 --enable-experimental-malloc state the generated code should
be identical on all arches other than ppc/ppc64 and on ppc/ppc64 should use
lwsync instead of isync barrier.
diff --git a/ChangeLog b/ChangeLog
index 48b5d02..1e9df42 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2009-07-13 Jakub Jelinek <jakub@redhat.com>
+
+ * include/atomic.h (catomic_compare_and_exchange_val_rel): If arch
+ overrides atomic_compare_and_exchange_val_rel, define to
+ atomic_compare_and_exchange_val_rel by default, otherwise default
+ to catomic_compare_and_exchange_val_acq.
+ (catomic_compare_and_exchange_bool_rel): If arch overrides
+ atomic_compare_and_exchange_bool_rel, define to
+ atomic_compare_and_exchange_bool_rel by default.
+ * malloc/malloc.c (_int_free): Revert 2009-07-02 change.
+ Use catomic_compare_and_exchange_val_rel instead of
+ catomic_compare_and_exchange_val_acq.
+
2009-07-16 Ulrich Drepper <drepper@redhat.com>
* sysdeps/generic/ldsodefs.h: Add prototype for
diff --git a/include/atomic.h b/include/atomic.h
index 9366f78..37d0111 100644
--- a/include/atomic.h
+++ b/include/atomic.h
@@ -107,14 +107,19 @@
#endif
-#ifndef atomic_compare_and_exchange_val_rel
-# define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \
- atomic_compare_and_exchange_val_acq (mem, newval, oldval)
+#ifndef catomic_compare_and_exchange_val_rel
+# ifndef atomic_compare_and_exchange_val_rel
+# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
+ catomic_compare_and_exchange_val_acq (mem, newval, oldval)
+# else
+# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
+ atomic_compare_and_exchange_val_rel (mem, newval, oldval)
+# endif
#endif
-#ifndef catomic_compare_and_exchange_val_rel
-# define catomic_compare_and_exchange_val_rel(mem, newval, oldval) \
+#ifndef atomic_compare_and_exchange_val_rel
+# define atomic_compare_and_exchange_val_rel(mem, newval, oldval) \
atomic_compare_and_exchange_val_acq (mem, newval, oldval)
#endif
@@ -155,15 +160,20 @@
#endif
-#ifndef atomic_compare_and_exchange_bool_rel
-# define atomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
- atomic_compare_and_exchange_bool_acq (mem, newval, oldval)
+#ifndef catomic_compare_and_exchange_bool_rel
+# ifndef atomic_compare_and_exchange_bool_rel
+# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
+ catomic_compare_and_exchange_bool_acq (mem, newval, oldval)
+# else
+# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
+ atomic_compare_and_exchange_bool_rel (mem, newval, oldval)
+# endif
#endif
-#ifndef catomic_compare_and_exchange_bool_rel
-# define catomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
- catomic_compare_and_exchange_bool_acq (mem, newval, oldval)
+#ifndef atomic_compare_and_exchange_bool_rel
+# define atomic_compare_and_exchange_bool_rel(mem, newval, oldval) \
+ atomic_compare_and_exchange_bool_acq (mem, newval, oldval)
#endif
diff --git a/malloc/malloc.c b/malloc/malloc.c
index 70e4e58..0c0182e 100644
--- a/malloc/malloc.c
+++ b/malloc/malloc.c
@@ -4822,9 +4822,8 @@ _int_free(mstate av, mchunkptr p)
goto errout;
}
p->fd = fd = old;
- atomic_full_barrier ();
}
- while ((old = catomic_compare_and_exchange_val_acq (fb, p, fd)) != fd);
+ while ((old = catomic_compare_and_exchange_val_rel (fb, p, fd)) != fd);
#else
/* Another simple check: make sure the top of the bin is not the
record we are going to add (i.e., double free). */
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 13 +++++++++++++
include/atomic.h | 32 +++++++++++++++++++++-----------
malloc/malloc.c | 3 +--
3 files changed, 35 insertions(+), 13 deletions(-)
hooks/post-receive
--
GNU C Library master sources