From 2b5174253155bdace1262ea2ab53d11347ecdefd Mon Sep 17 00:00:00 2001 From: Adhemerval Zanella Date: Tue, 31 Mar 2020 15:43:25 -0300 Subject: nptl: Move cancel state out of cancelhandling Now that thread cancellation state is not accessed concurrently anymore, it is possible to move it out the 'cancelhandling'. The code is also simplified: CANCELLATION_P is replaced with a internal pthread_testcancel call and the CANCELSTATE_BIT{MASK} is removed. With this behavior pthread_setcancelstate does not require to act on cancellation if cancel type is asynchronous (is already handled either by pthread_setcanceltype or by the signal handler). Checked on x86_64-linux-gnu and aarch64-linux-gnu. --- nptl/pthread_cancel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'nptl/pthread_cancel.c') diff --git a/nptl/pthread_cancel.c b/nptl/pthread_cancel.c index 33e82c3717..f4f08363cf 100644 --- a/nptl/pthread_cancel.c +++ b/nptl/pthread_cancel.c @@ -45,7 +45,7 @@ sigcancel_handler (int sig, siginfo_t *si, void *ctx) int ch = atomic_load_relaxed (&self->cancelhandling); /* Cancelation not enabled, not cancelled, or already exitting. */ - if ((ch & CANCELSTATE_BITMASK) != 0 + if (self->cancelstate == PTHREAD_CANCEL_DISABLE || (ch & CANCELED_BITMASK) == 0 || (ch & EXITING_BITMASK) != 0) return; -- cgit 1.4.1