diff options
Diffstat (limited to 'libc/signal')
-rw-r--r-- | libc/signal/sigpause.c | 38 |
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)) |