aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-11-03 10:55:09 -0200
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-11-15 15:45:39 -0200
commitad4f43a2344864ae2304060dcc722a7a63bad1b4 (patch)
tree3de70e9c5d60927f0eedbd7179773f8d379812bf
parentd0212d429da889345978546f215ce62a5f0e007a (diff)
downloadglibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.zip
glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.tar.gz
glibc-ad4f43a2344864ae2304060dcc722a7a63bad1b4.tar.bz2
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>
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/posix/sigpause.c26
2 files changed, 12 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index b63fa4f..6f10dd9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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
diff --git a/sysdeps/posix/sigpause.c b/sysdeps/posix/sigpause.c
index 9038ed3..a61e056 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 ();