mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-08 14:20:07 +00:00
Use atomic_exchange_release/acquire
Rename atomic_exchange_rel/acq to use atomic_exchange_release/acquire since these map to the standard C11 atomic builtins. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
parent
c02e29a0ba
commit
22f4ab2d20
@ -74,7 +74,7 @@ __assert_fail_base (const char *fmt, const char *assertion, const char *file,
|
|||||||
|
|
||||||
/* We have to free the old buffer since the application might
|
/* We have to free the old buffer since the application might
|
||||||
catch the SIGABRT signal. */
|
catch the SIGABRT signal. */
|
||||||
struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg, buf);
|
struct abort_msg_s *old = atomic_exchange_acquire (&__abort_msg, buf);
|
||||||
|
|
||||||
if (old != NULL)
|
if (old != NULL)
|
||||||
__munmap (old, old->size);
|
__munmap (old, old->size);
|
||||||
|
@ -89,7 +89,7 @@ __lll_abstimed_lock (void *ptr,
|
|||||||
|
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
if (atomic_exchange_acq ((int *)ptr, 2) == 0)
|
if (atomic_exchange_acquire ((int *)ptr, 2) == 0)
|
||||||
return 0;
|
return 0;
|
||||||
else if (! valid_nanoseconds (tsp->tv_nsec))
|
else if (! valid_nanoseconds (tsp->tv_nsec))
|
||||||
return EINVAL;
|
return EINVAL;
|
||||||
|
@ -78,7 +78,7 @@ extern kern_return_t __gsync_wait_intr
|
|||||||
|| atomic_compare_and_exchange_bool_acq (__iptr, 1, 0) != 0) \
|
|| atomic_compare_and_exchange_bool_acq (__iptr, 1, 0) != 0) \
|
||||||
while (1) \
|
while (1) \
|
||||||
{ \
|
{ \
|
||||||
if (atomic_exchange_acq (__iptr, 2) == 0) \
|
if (atomic_exchange_acquire (__iptr, 2) == 0) \
|
||||||
break; \
|
break; \
|
||||||
__lll_wait (__iptr, 2, __flags); \
|
__lll_wait (__iptr, 2, __flags); \
|
||||||
} \
|
} \
|
||||||
@ -102,7 +102,7 @@ extern kern_return_t __gsync_wait_intr
|
|||||||
#define __lll_unlock(ptr, flags) \
|
#define __lll_unlock(ptr, flags) \
|
||||||
({ \
|
({ \
|
||||||
int *__iptr = (int *)(ptr); \
|
int *__iptr = (int *)(ptr); \
|
||||||
if (atomic_exchange_rel (__iptr, 0) == 2) \
|
if (atomic_exchange_release (__iptr, 0) == 2) \
|
||||||
__lll_wake (__iptr, (flags)); \
|
__lll_wake (__iptr, (flags)); \
|
||||||
(void)0; \
|
(void)0; \
|
||||||
})
|
})
|
||||||
|
@ -4718,7 +4718,7 @@ static void malloc_consolidate(mstate av)
|
|||||||
maxfb = &fastbin (av, NFASTBINS - 1);
|
maxfb = &fastbin (av, NFASTBINS - 1);
|
||||||
fb = &fastbin (av, 0);
|
fb = &fastbin (av, 0);
|
||||||
do {
|
do {
|
||||||
p = atomic_exchange_acq (fb, NULL);
|
p = atomic_exchange_acquire (fb, NULL);
|
||||||
if (p != 0) {
|
if (p != 0) {
|
||||||
do {
|
do {
|
||||||
{
|
{
|
||||||
|
@ -2538,7 +2538,7 @@ aiocb64}, since the LFS transparently replaces the old interface.
|
|||||||
@c munmap ok
|
@c munmap ok
|
||||||
@c THREAD_COPY_STACK_GUARD ok
|
@c THREAD_COPY_STACK_GUARD ok
|
||||||
@c THREAD_COPY_POINTER_GUARD ok
|
@c THREAD_COPY_POINTER_GUARD ok
|
||||||
@c atomic_exchange_acq ok
|
@c atomic_exchange_acquire ok
|
||||||
@c lll_futex_wake ok
|
@c lll_futex_wake ok
|
||||||
@c deallocate_stack @asulock @ascuheap @aculock @acsmem
|
@c deallocate_stack @asulock @ascuheap @aculock @acsmem
|
||||||
@c lll_lock (state_cache_lock) @asulock @aculock
|
@c lll_lock (state_cache_lock) @asulock @aculock
|
||||||
@ -2570,7 +2570,7 @@ aiocb64}, since the LFS transparently replaces the old interface.
|
|||||||
@c atomic_fetch_add_relaxed ok
|
@c atomic_fetch_add_relaxed ok
|
||||||
@c clone ok
|
@c clone ok
|
||||||
@c atomic_fetch_add_relaxed ok
|
@c atomic_fetch_add_relaxed ok
|
||||||
@c atomic_exchange_acq ok
|
@c atomic_exchange_acquire ok
|
||||||
@c lll_futex_wake ok
|
@c lll_futex_wake ok
|
||||||
@c deallocate_stack dup
|
@c deallocate_stack dup
|
||||||
@c sched_setaffinity ok
|
@c sched_setaffinity ok
|
||||||
@ -2590,7 +2590,7 @@ aiocb64}, since the LFS transparently replaces the old interface.
|
|||||||
@c start_thread ok
|
@c start_thread ok
|
||||||
@c HP_TIMING_NOW ok
|
@c HP_TIMING_NOW ok
|
||||||
@c ctype_init @mtslocale
|
@c ctype_init @mtslocale
|
||||||
@c atomic_exchange_acq ok
|
@c atomic_exchange_acquire ok
|
||||||
@c lll_futex_wake ok
|
@c lll_futex_wake ok
|
||||||
@c sigemptyset ok
|
@c sigemptyset ok
|
||||||
@c sigaddset ok
|
@c sigaddset ok
|
||||||
|
@ -451,7 +451,7 @@ this function is in @file{stdlib.h}.
|
|||||||
@c clear_fastchunks ok
|
@c clear_fastchunks ok
|
||||||
@c unsorted_chunks dup ok
|
@c unsorted_chunks dup ok
|
||||||
@c fastbin dup ok
|
@c fastbin dup ok
|
||||||
@c atomic_exchange_acq ok
|
@c atomic_exchange_acquire ok
|
||||||
@c check_inuse_chunk dup ok/disabled
|
@c check_inuse_chunk dup ok/disabled
|
||||||
@c chunk_at_offset dup ok
|
@c chunk_at_offset dup ok
|
||||||
@c chunksize dup ok
|
@c chunksize dup ok
|
||||||
|
@ -415,7 +415,7 @@ start_thread (void *arg)
|
|||||||
unwind_buf.priv.data.cleanup = NULL;
|
unwind_buf.priv.data.cleanup = NULL;
|
||||||
|
|
||||||
/* Allow setxid from now onwards. */
|
/* Allow setxid from now onwards. */
|
||||||
if (__glibc_unlikely (atomic_exchange_acq (&pd->setxid_futex, 0) == -2))
|
if (__glibc_unlikely (atomic_exchange_acquire (&pd->setxid_futex, 0) == -2))
|
||||||
futex_wake (&pd->setxid_futex, 1, FUTEX_PRIVATE);
|
futex_wake (&pd->setxid_futex, 1, FUTEX_PRIVATE);
|
||||||
|
|
||||||
if (__glibc_likely (! not_first_call))
|
if (__glibc_likely (! not_first_call))
|
||||||
|
@ -171,7 +171,7 @@ __pthread_mutex_unlock_full (pthread_mutex_t *mutex, int decr)
|
|||||||
The unlock operation must be the last access to the mutex to not
|
The unlock operation must be the last access to the mutex to not
|
||||||
violate the mutex destruction requirements (see __lll_unlock). */
|
violate the mutex destruction requirements (see __lll_unlock). */
|
||||||
private = PTHREAD_ROBUST_MUTEX_PSHARED (mutex);
|
private = PTHREAD_ROBUST_MUTEX_PSHARED (mutex);
|
||||||
if (__glibc_unlikely ((atomic_exchange_rel (&mutex->__data.__lock, 0)
|
if (__glibc_unlikely ((atomic_exchange_release (&mutex->__data.__lock, 0)
|
||||||
& FUTEX_WAITERS) != 0))
|
& FUTEX_WAITERS) != 0))
|
||||||
futex_wake ((unsigned int *) &mutex->__data.__lock, 1, private);
|
futex_wake ((unsigned int *) &mutex->__data.__lock, 1, private);
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ typedef struct
|
|||||||
# define THREAD_GSCOPE_RESET_FLAG() \
|
# define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -95,7 +95,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -103,7 +103,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -89,7 +89,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -118,7 +118,7 @@ typedef struct
|
|||||||
# define THREAD_GSCOPE_RESET_FLAG() \
|
# define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -23,7 +23,7 @@ __pthread_spin_init (pthread_spinlock_t *lock, int pshared)
|
|||||||
{
|
{
|
||||||
/* CONCURRENCTY NOTES:
|
/* CONCURRENCTY NOTES:
|
||||||
|
|
||||||
The atomic_exchange_rel synchronizes-with the atomic_exhange_acq in
|
The atomic_exchange_release synchronizes-with the atomic_exhange_acq in
|
||||||
pthread_spin_lock.
|
pthread_spin_lock.
|
||||||
|
|
||||||
On hppa we must not use a plain `stw` to reset the guard lock. This
|
On hppa we must not use a plain `stw` to reset the guard lock. This
|
||||||
@ -40,7 +40,7 @@ __pthread_spin_init (pthread_spinlock_t *lock, int pshared)
|
|||||||
Therefore if a variable is used in an atomic macro it must always be
|
Therefore if a variable is used in an atomic macro it must always be
|
||||||
manipulated with atomic macros in order for memory ordering rules to
|
manipulated with atomic macros in order for memory ordering rules to
|
||||||
be preserved. */
|
be preserved. */
|
||||||
atomic_exchange_rel (lock, 0);
|
atomic_exchange_release (lock, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
versioned_symbol (libc, __pthread_spin_init, pthread_spin_init,
|
versioned_symbol (libc, __pthread_spin_init, pthread_spin_init,
|
||||||
|
@ -23,7 +23,7 @@ __pthread_spin_unlock (pthread_spinlock_t *lock)
|
|||||||
{
|
{
|
||||||
/* CONCURRENCTY NOTES:
|
/* CONCURRENCTY NOTES:
|
||||||
|
|
||||||
The atomic_exchange_rel synchronizes-with the atomic_exhange_acq in
|
The atomic_exchange_release synchronizes-with the atomic_exhange_acq in
|
||||||
pthread_spin_lock.
|
pthread_spin_lock.
|
||||||
|
|
||||||
On hppa we must not use a plain `stw` to reset the guard lock. This
|
On hppa we must not use a plain `stw` to reset the guard lock. This
|
||||||
@ -40,7 +40,7 @@ __pthread_spin_unlock (pthread_spinlock_t *lock)
|
|||||||
Therefore if a variable is used in an atomic macro it must always be
|
Therefore if a variable is used in an atomic macro it must always be
|
||||||
manipulated with atomic macros in order for memory ordering rules to
|
manipulated with atomic macros in order for memory ordering rules to
|
||||||
be preserved. */
|
be preserved. */
|
||||||
atomic_exchange_rel (lock, 0);
|
atomic_exchange_release (lock, 0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
versioned_symbol (libc, __pthread_spin_unlock, pthread_spin_unlock,
|
versioned_symbol (libc, __pthread_spin_unlock, pthread_spin_unlock,
|
||||||
|
@ -123,7 +123,7 @@ static inline void __set_cr27(struct pthread *cr27)
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -147,7 +147,7 @@ register struct pthread *__thread_self __asm__("r13");
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -119,7 +119,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
int __res = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
int __res = atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -122,7 +122,7 @@ extern void * __m68k_read_tp (void);
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -100,7 +100,7 @@ typedef struct
|
|||||||
# define THREAD_GSCOPE_RESET_FLAG() \
|
# define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -150,7 +150,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -130,7 +130,7 @@ register struct pthread *__thread_self __asm__("r23");
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -319,7 +319,7 @@ __futex_clocklock64 (int *futex, clockid_t clockid,
|
|||||||
{
|
{
|
||||||
if (__glibc_unlikely (atomic_compare_and_exchange_bool_acq (futex, 1, 0)))
|
if (__glibc_unlikely (atomic_compare_and_exchange_bool_acq (futex, 1, 0)))
|
||||||
{
|
{
|
||||||
while (atomic_exchange_acq (futex, 2) != 0)
|
while (atomic_exchange_acquire (futex, 2) != 0)
|
||||||
{
|
{
|
||||||
int err = 0;
|
int err = 0;
|
||||||
err = __futex_abstimed_wait64 ((unsigned int *) futex, 2, clockid,
|
err = __futex_abstimed_wait64 ((unsigned int *) futex, 2, clockid,
|
||||||
|
@ -119,7 +119,7 @@ libc_hidden_proto (__lll_lock_wait)
|
|||||||
((void) \
|
((void) \
|
||||||
({ \
|
({ \
|
||||||
int *__futex = (futex); \
|
int *__futex = (futex); \
|
||||||
if (__glibc_unlikely (atomic_exchange_acq (__futex, 2) != 0)) \
|
if (__glibc_unlikely (atomic_exchange_acquire (__futex, 2) != 0)) \
|
||||||
__lll_lock_wait (__futex, private); \
|
__lll_lock_wait (__futex, private); \
|
||||||
}))
|
}))
|
||||||
#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
|
#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private)
|
||||||
@ -147,7 +147,7 @@ libc_hidden_proto (__lll_lock_wake)
|
|||||||
({ \
|
({ \
|
||||||
int *__futex = (futex); \
|
int *__futex = (futex); \
|
||||||
int __private = (private); \
|
int __private = (private); \
|
||||||
int __oldval = atomic_exchange_rel (__futex, 0); \
|
int __oldval = atomic_exchange_release (__futex, 0); \
|
||||||
if (__glibc_unlikely (__oldval > 1)) \
|
if (__glibc_unlikely (__oldval > 1)) \
|
||||||
{ \
|
{ \
|
||||||
if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \
|
if (__builtin_constant_p (private) && (private) == LLL_PRIVATE) \
|
||||||
|
@ -164,7 +164,7 @@ register tcbhead_t *__thread_self __asm__("r10");
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
int __res = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag,\
|
int __res = atomic_exchange_release (&THREAD_SELF->header.gscope_flag,\
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, \
|
||||||
|
@ -137,7 +137,7 @@ __libc_message (const char *fmt, ...)
|
|||||||
|
|
||||||
/* We have to free the old buffer since the application might
|
/* We have to free the old buffer since the application might
|
||||||
catch the SIGABRT signal. */
|
catch the SIGABRT signal. */
|
||||||
struct abort_msg_s *old = atomic_exchange_acq (&__abort_msg,
|
struct abort_msg_s *old = atomic_exchange_acquire (&__abort_msg,
|
||||||
buf);
|
buf);
|
||||||
if (old != NULL)
|
if (old != NULL)
|
||||||
__munmap (old, old->size);
|
__munmap (old, old->size);
|
||||||
|
@ -214,7 +214,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -113,7 +113,7 @@ typedef struct
|
|||||||
# define THREAD_GSCOPE_RESET_FLAG() \
|
# define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -157,7 +157,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -129,7 +129,7 @@ typedef struct
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
@ -130,7 +130,7 @@ register struct pthread *__thread_self __asm__("%g7");
|
|||||||
#define THREAD_GSCOPE_RESET_FLAG() \
|
#define THREAD_GSCOPE_RESET_FLAG() \
|
||||||
do \
|
do \
|
||||||
{ int __res \
|
{ int __res \
|
||||||
= atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \
|
= atomic_exchange_release (&THREAD_SELF->header.gscope_flag, \
|
||||||
THREAD_GSCOPE_FLAG_UNUSED); \
|
THREAD_GSCOPE_FLAG_UNUSED); \
|
||||||
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
if (__res == THREAD_GSCOPE_FLAG_WAIT) \
|
||||||
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \
|
||||||
|
Loading…
Reference in New Issue
Block a user