mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-19 13:40:59 +08:00
nptl: Fix pthread_cancel cancelhandling atomic operations
The 404656009b reversion did not setup the atomic loop to set the cancel bits correctly. The fix is essentially what pthread_cancel did prior 26cfbb7162ad. Checked on x86_64-linux-gnu and aarch64-linux-gnu.
This commit is contained in:
parent
c72a1a062a
commit
62be968167
@ -121,6 +121,7 @@ __pthread_cancel (pthread_t th)
|
||||
int newval;
|
||||
do
|
||||
{
|
||||
again:
|
||||
newval = oldval | CANCELING_BITMASK | CANCELED_BITMASK;
|
||||
if (oldval == newval)
|
||||
break;
|
||||
@ -134,7 +135,7 @@ __pthread_cancel (pthread_t th)
|
||||
int newval2 = oldval | CANCELING_BITMASK;
|
||||
if (!atomic_compare_exchange_weak_acquire (&pd->cancelhandling,
|
||||
&oldval, newval2))
|
||||
continue;
|
||||
goto again;
|
||||
|
||||
if (pd == THREAD_SELF)
|
||||
/* This is not merely an optimization: An application may
|
||||
|
Loading…
x
Reference in New Issue
Block a user