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:
parent
d0212d429d
commit
ad4f43a234
@ -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>
|
2017-11-15 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* scripts/build-many-glibcs.py (Context.checkout): Default Linux
|
* scripts/build-many-glibcs.py (Context.checkout): Default Linux
|
||||||
|
@ -19,15 +19,13 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
#include <stddef.h> /* For NULL. */
|
#include <stddef.h> /* For NULL. */
|
||||||
#include <sysdep-cancel.h>
|
|
||||||
#undef sigpause
|
#undef sigpause
|
||||||
|
|
||||||
#include <sigset-cvt-mask.h>
|
#include <sigset-cvt-mask.h>
|
||||||
|
#include <sysdep-cancel.h>
|
||||||
|
|
||||||
/* Set the mask of blocked signals to MASK,
|
int
|
||||||
wait for a signal to arrive, and then restore the mask. */
|
__sigpause (int sig_or_mask, int is_sig)
|
||||||
static int
|
|
||||||
do_sigpause (int sig_or_mask, int is_sig)
|
|
||||||
{
|
{
|
||||||
sigset_t set;
|
sigset_t set;
|
||||||
|
|
||||||
@ -46,21 +44,6 @@ do_sigpause (int sig_or_mask, int is_sig)
|
|||||||
to do anything here. */
|
to do anything here. */
|
||||||
return __sigsuspend (&set);
|
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)
|
libc_hidden_def (__sigpause)
|
||||||
|
|
||||||
/* We have to provide a default version of this function since the
|
/* We have to provide a default version of this function since the
|
||||||
@ -87,3 +70,6 @@ __xpg_sigpause (int sig)
|
|||||||
return __sigpause (sig, 1);
|
return __sigpause (sig, 1);
|
||||||
}
|
}
|
||||||
strong_alias (__xpg_sigpause, __libc___xpg_sigpause)
|
strong_alias (__xpg_sigpause, __libc___xpg_sigpause)
|
||||||
|
|
||||||
|
/* __sigsuspend handles cancellation. */
|
||||||
|
LIBC_CANCEL_HANDLED ();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user