diff options
author | Ulrich Drepper <drepper@redhat.com> | 2003-07-01 08:31:38 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2003-07-01 08:31:38 +0000 |
commit | b5d5b67be3e624efa7f44df4375dfdfffa1f97cb (patch) | |
tree | c3ba187098d3aa88a83200ab4a5c4c384abc9124 | |
parent | 96c814d3d866eff5a86599cbe567ca167189c7ea (diff) | |
download | glibc-b5d5b67be3e624efa7f44df4375dfdfffa1f97cb.zip glibc-b5d5b67be3e624efa7f44df4375dfdfffa1f97cb.tar.gz glibc-b5d5b67be3e624efa7f44df4375dfdfffa1f97cb.tar.bz2 |
Update.
2003-05-04 H.J. Lu <hongjiu.lu@intel.com>
* malloc/arena.c (arena_get2): Add atomic_write_barrier.
* malloc/thread-m.h: Include <atomic.h>.
(atomic_full_barrier): Provide default.
(atomic_read_barrier): Likewise.
(atomic_write_barrier): Likewise.
* sysdeps/ia64/bits/atomic.h (atomic_full_barrier): New #define.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | malloc/arena.c | 3 | ||||
-rw-r--r-- | malloc/thread-m.h | 13 | ||||
-rw-r--r-- | sysdeps/ia64/bits/atomic.h | 2 |
4 files changed, 26 insertions, 1 deletions
@@ -1,3 +1,12 @@ +2003-05-04 H.J. Lu <hongjiu.lu@intel.com> + + * malloc/arena.c (arena_get2): Add atomic_write_barrier. + * malloc/thread-m.h: Include <atomic.h>. + (atomic_full_barrier): Provide default. + (atomic_read_barrier): Likewise. + (atomic_write_barrier): Likewise. + * sysdeps/ia64/bits/atomic.h (atomic_full_barrier): New #define. + 2003-06-30 Ulrich Drepper <drepper@redhat.com> * sysdeps/generic/sysdep.h: Define cfi_rel_offset and CFI_REL_OFFSET. diff --git a/malloc/arena.c b/malloc/arena.c index e47d3d0..fb7b92f 100644 --- a/malloc/arena.c +++ b/malloc/arena.c @@ -1,5 +1,5 @@ /* Malloc implementation for multiple threads without lock contention. - Copyright (C) 2001, 2002 Free Software Foundation, Inc. + Copyright (C) 2001, 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Wolfram Gloger <wg@malloc.de>, 2001. @@ -758,6 +758,7 @@ arena_get2(a_tsd, size) mstate a_tsd; size_t size; /* Add the new arena to the global list. */ (void)mutex_lock(&list_lock); a->next = main_arena.next; + atomic_write_barrier (); main_arena.next = a; (void)mutex_unlock(&list_lock); diff --git a/malloc/thread-m.h b/malloc/thread-m.h index da8bbf3..1dcaed0 100644 --- a/malloc/thread-m.h +++ b/malloc/thread-m.h @@ -31,6 +31,7 @@ #if defined(_LIBC) /* The GNU C library, a special case of Posix threads */ +#include <atomic.h> #include <bits/libc-lock.h> #ifdef PTHREAD_MUTEX_INITIALIZER @@ -306,4 +307,16 @@ typedef void *tsd_key_t; #endif /* defined(NO_THREADS) */ +#ifndef atomic_full_barrier +# define atomic_full_barrier() __asm ("" ::: "memory") +#endif + +#ifndef atomic_read_barrier +# define atomic_read_barrier() atomic_full_barrier () +#endif + +#ifndef atomic_write_barrier +# define atomic_write_barrier() atomic_full_barrier () +#endif + #endif /* !defined(_THREAD_M_H) */ diff --git a/sysdeps/ia64/bits/atomic.h b/sysdeps/ia64/bits/atomic.h index 2734667..c8b567b 100644 --- a/sysdeps/ia64/bits/atomic.h +++ b/sysdeps/ia64/bits/atomic.h @@ -122,3 +122,5 @@ typedef uintmax_t uatomic_max_t; } \ while (__builtin_expect (__val != __oldval, 0)); \ __oldval & __mask; }) + +#define atomic_full_barrier() __sync_synchronize () |