summaryrefslogtreecommitdiff
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/signal/sigpause.c38
1 files changed, 12 insertions, 26 deletions
diff --git a/libc/signal/sigpause.c b/libc/signal/sigpause.c
index ebd7af3b9..63afeead2 100644
--- a/libc/signal/sigpause.c
+++ b/libc/signal/sigpause.c
@@ -17,22 +17,16 @@
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA. */
-#define __UCLIBC_HIDE_DEPRECATED__
-/* psm: need the BSD version of sigpause here */
-#include <errno.h>
-#define __FAVOR_BSD
#include <signal.h>
#define __need_NULL
#include <stddef.h>
-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
-#include <sysdep-cancel.h>
-#endif
+#include <cancel.h>
#include "sigset-cvt-mask.h"
/* Set the mask of blocked signals to MASK,
wait for a signal to arrive, and then restore the mask. */
-static int __internal_sigpause (int sig_or_mask, int is_sig)
+static int __sigpause (int sig_or_mask, int is_sig)
{
sigset_t set;
@@ -50,29 +44,21 @@ static int __internal_sigpause (int sig_or_mask, int is_sig)
/* Note the sigpause() is a cancellation point. But since we call
sigsuspend() which itself is a cancellation point we do not have
to do anything here. */
- return sigsuspend (&set);
+ /* uClibc note: not true on uClibc, we call the non-cancellable version */
+ return __NC(sigsuspend)(&set);
}
-strong_alias(__internal_sigpause,__sigpause)
-#undef sigpause
+int __bsd_sigpause(int mask);
+int __bsd_sigpause(int mask)
+{
+ return __sigpause(mask, 0);
+}
/* We have to provide a default version of this function since the
standards demand it. The version which is a bit more reasonable is
the BSD version. So make this the default. */
-int sigpause (int mask)
+static int __NC(sigpause)(int sig)
{
-#ifdef __UCLIBC_HAS_THREADS_NATIVE__
- if (SINGLE_THREAD_P)
- return __internal_sigpause (mask, 0);
-
- int oldtype = LIBC_CANCEL_ASYNC ();
-
- int result = __internal_sigpause (mask, 0);
-
- LIBC_CANCEL_RESET (oldtype);
-
- return result;
-#else
- return __internal_sigpause (mask, 0);
-#endif
+ return __sigpause(sig, 1);
}
+CANCELLABLE_SYSCALL(int, sigpause, (int sig), (sig))