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>
This commit is contained in:
Adhemerval Zanella 2017-11-03 10:55:09 -02:00
parent d0212d429d
commit ad4f43a234
2 changed files with 12 additions and 20 deletions

View File

@ -1,3 +1,9 @@
2017-11-15 Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysdeps/posix/sigpause.c (do_sigpause): Remove.
(__sigpause): Rely on __sigsuspend to implement single thread
optimization. Add LIBC_CANCEL_HANDLED for cancellation marking.
2017-11-15 Joseph Myers <joseph@codesourcery.com>
* scripts/build-many-glibcs.py (Context.checkout): Default Linux

View File

@ -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 ();