diff options
author | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2017-11-03 10:55:09 -0200 |
---|---|---|
committer | Adhemerval Zanella <adhemerval.zanella@linaro.org> | 2017-11-15 15:45:39 -0200 |
commit | ad4f43a2344864ae2304060dcc722a7a63bad1b4 (patch) | |
tree | 3de70e9c5d60927f0eedbd7179773f8d379812bf /sysdeps | |
parent | d0212d429da889345978546f215ce62a5f0e007a (diff) | |
download | glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.tar glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.tar.gz glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.tar.bz2 glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.zip |
Cleanup sigpause implementation
This patch simplify sigpause by remobing the single thread optimization
since it will be handled already by the __sigsuspend call.
Checked on x86_64-linux-gnu.
* sysdeps/posix/sigpause.c (do_sigpause): Remove.
(__sigpause): Rely on __sigsuspend to implement single thread
optimization. Add LIBC_CANCEL_HANDLED for cancellation marking.
Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Zack Weinberg <zackw@panix.com>
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/posix/sigpause.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c index 9038ed368d..a61e056d24 100644 --- a/sysdeps/posix/sigpause.c +++ b/sysdeps/posix/sigpause.c @@ -19,15 +19,13 @@ #include <errno.h> #include <signal.h> #include <stddef.h> /* For NULL. */ -#include <sysdep-cancel.h> #undef sigpause #include <sigset-cvt-mask.h> +#include <sysdep-cancel.h> -/* Set the mask of blocked signals to MASK, - wait for a signal to arrive, and then restore the mask. */ -static int -do_sigpause (int sig_or_mask, int is_sig) +int +__sigpause (int sig_or_mask, int is_sig) { sigset_t set; @@ -46,21 +44,6 @@ do_sigpause (int sig_or_mask, int is_sig) to do anything here. */ return __sigsuspend (&set); } - -int -__sigpause (int sig_or_mask, int is_sig) -{ - if (SINGLE_THREAD_P) - return do_sigpause (sig_or_mask, is_sig); - - int oldtype = LIBC_CANCEL_ASYNC (); - - int result = do_sigpause (sig_or_mask, is_sig); - - LIBC_CANCEL_RESET (oldtype); - - return result; -} libc_hidden_def (__sigpause) /* We have to provide a default version of this function since the @@ -87,3 +70,6 @@ __xpg_sigpause (int sig) return __sigpause (sig, 1); } strong_alias (__xpg_sigpause, __libc___xpg_sigpause) + +/* __sigsuspend handles cancellation. */ +LIBC_CANCEL_HANDLED (); |