diff options
Diffstat (limited to 'libc/sysdeps/linux/common')
-rw-r--r-- | libc/sysdeps/linux/common/pause.c | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/libc/sysdeps/linux/common/pause.c b/libc/sysdeps/linux/common/pause.c index 8a4d82177..32fe839c0 100644 --- a/libc/sysdeps/linux/common/pause.c +++ b/libc/sysdeps/linux/common/pause.c @@ -7,16 +7,24 @@ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball. */ -#define __need_NULL -#include <stddef.h> +#include <sys/syscall.h> #include <unistd.h> -#include <signal.h> #include <cancel.h> +#ifdef __NR_pause +/* even if it is not obvious, glibc uses the pause syscall, see syscalls.list */ +# define __NR___pause_nocancel __NR_pause +static _syscall0(int, __NC(pause)) +CANCELLABLE_SYSCALL(int, pause, (void), ()) +#else +# define __need_NULL +# include <stddef.h> +# include <signal.h> + int -#ifdef __LINUXTHREADS_OLD__ +# ifdef __LINUXTHREADS_OLD__ weak_function -#endif +# endif pause(void) { sigset_t set; @@ -30,3 +38,4 @@ pause(void) } lt_strong_alias(pause) LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */ +#endif |