mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-27 03:33:33 +08:00
Use relaxed atomics since there is no MO dependence
Replace the 3 uses of atomic_bit_set and atomic_bit_test_set with atomic_fetch_or_relaxed. Using relaxed MO is correct since the atomics are used to ensure memory is released only once. Reviewed-by: Florian Weimer <fweimer@redhat.com>
This commit is contained in:
parent
f278835f59
commit
a30e960328
@ -24,7 +24,8 @@ void
|
||||
__nptl_free_tcb (struct pthread *pd)
|
||||
{
|
||||
/* The thread is exiting now. */
|
||||
if (atomic_bit_test_set (&pd->cancelhandling, TERMINATED_BIT) == 0)
|
||||
if ((atomic_fetch_or_relaxed (&pd->cancelhandling, TERMINATED_BITMASK)
|
||||
& TERMINATED_BITMASK) == 0)
|
||||
{
|
||||
/* Free TPP data. */
|
||||
if (pd->tpp != NULL)
|
||||
|
@ -487,7 +487,7 @@ start_thread (void *arg)
|
||||
/* The thread is exiting now. Don't set this bit until after we've hit
|
||||
the event-reporting breakpoint, so that td_thr_get_info on us while at
|
||||
the breakpoint reports TD_THR_RUN state rather than TD_THR_ZOMBIE. */
|
||||
atomic_bit_set (&pd->cancelhandling, EXITING_BIT);
|
||||
atomic_fetch_or_relaxed (&pd->cancelhandling, EXITING_BITMASK);
|
||||
|
||||
if (__glibc_unlikely (atomic_decrement_and_test (&__nptl_nthreads)))
|
||||
/* This was the last thread. */
|
||||
|
@ -43,12 +43,6 @@
|
||||
atomic_compare_and_exchange_val_acq (&(descr)->member, new, old)
|
||||
#endif
|
||||
|
||||
#ifndef THREAD_ATOMIC_BIT_SET
|
||||
# define THREAD_ATOMIC_BIT_SET(descr, member, bit) \
|
||||
atomic_bit_set (&(descr)->member, bit)
|
||||
#endif
|
||||
|
||||
|
||||
static inline short max_adaptive_count (void)
|
||||
{
|
||||
#if HAVE_TUNABLES
|
||||
@ -276,7 +270,7 @@ __do_cancel (void)
|
||||
struct pthread *self = THREAD_SELF;
|
||||
|
||||
/* Make sure we get no more cancellations. */
|
||||
atomic_bit_set (&self->cancelhandling, EXITING_BIT);
|
||||
atomic_fetch_or_relaxed (&self->cancelhandling, EXITING_BITMASK);
|
||||
|
||||
__pthread_unwind ((__pthread_unwind_buf_t *)
|
||||
THREAD_GETMEM (self, cleanup_jmp_buf));
|
||||
|
Loading…
Reference in New Issue
Block a user