diff options
Diffstat (limited to 'nptl/libc-cancellation.c')
-rw-r--r-- | nptl/libc-cancellation.c | 8 |
1 files changed, 2 insertions, 6 deletions
diff --git a/nptl/libc-cancellation.c b/nptl/libc-cancellation.c index 35ac82b3d1..cada464d2b 100644 --- a/nptl/libc-cancellation.c +++ b/nptl/libc-cancellation.c @@ -88,10 +88,6 @@ __libc_disable_asynccancel (int oldtype) struct pthread *self = THREAD_SELF; int newval; -#ifdef THREAD_ATOMIC_AND - THREAD_ATOMIC_AND (self, cancelhandling, ~CANCELTYPE_BITMASK); - newval = THREAD_GETMEM (self, cancelhandling); -#else int oldval = THREAD_GETMEM (self, cancelhandling); while (1) @@ -109,13 +105,13 @@ __libc_disable_asynccancel (int oldtype) /* Prepare the next round. */ oldval = curval; } -#endif /* We cannot return when we are being canceled. Upon return the thread might be things which would have to be undone. The following loop should loop until the cancellation signal is delivered. */ - while (__builtin_expect (newval & CANCELED_BITMASK, 0)) + while (__builtin_expect ((newval & (CANCELING_BITMASK | CANCELED_BITMASK)) + == CANCELING_BITMASK, 0)) { lll_futex_wait (&self->cancelhandling, newval, LLL_PRIVATE); newval = THREAD_GETMEM (self, cancelhandling); |