Browse Source

pause.c: add back usage of pause syscall

No idea why it was removed when NPTL was added,
but glibc uses it as well.

Signed-off-by: Peter S. Mazinger <ps.m@gmx.net>
Signed-off-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
Peter S. Mazinger 14 years ago
parent
commit
62c208d68f
1 changed files with 14 additions and 5 deletions
  1. 14 5
      libc/sysdeps/linux/common/pause.c

+ 14 - 5
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