summaryrefslogtreecommitdiffstats
path: root/libc/sysdeps/linux/common/pause.c
diff options
context:
space:
mode:
authorCarmelo Amoroso <carmelo.amoroso@st.com>2008-07-31 15:21:24 +0000
committerCarmelo Amoroso <carmelo.amoroso@st.com>2008-07-31 15:21:24 +0000
commitdd7d7e3f138d1835d153c316f3d771e40dc641ba (patch)
tree7427232d1e9759028490f843152a83a4bbbab7db /libc/sysdeps/linux/common/pause.c
parent89ed2cccba266f7738ceb445e4d43103c08cbe75 (diff)
downloaduClibc-alpine-dd7d7e3f138d1835d153c316f3d771e40dc641ba.tar.bz2
uClibc-alpine-dd7d7e3f138d1835d153c316f3d771e40dc641ba.tar.xz
Synch with trunk at rev 22997.
Basically trailing whitespaces removal, fix non standard keywords asm -> __asm__ inline -> __inline__ and some minor changes on trunk. Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Diffstat (limited to 'libc/sysdeps/linux/common/pause.c')
-rw-r--r--libc/sysdeps/linux/common/pause.c30
1 files changed, 17 insertions, 13 deletions
diff --git a/libc/sysdeps/linux/common/pause.c b/libc/sysdeps/linux/common/pause.c
index 22a039b4f..31d3563fb 100644
--- a/libc/sysdeps/linux/common/pause.c
+++ b/libc/sysdeps/linux/common/pause.c
@@ -10,19 +10,23 @@
#define __UCLIBC_HIDE_DEPRECATED__
#include <sys/syscall.h>
#include <unistd.h>
+#include <sysdep-cancel.h>
-extern __typeof(pause) __libc_pause;
-#ifdef __NR_pause
-#define __NR___libc_pause __NR_pause
-_syscall0(int, __libc_pause);
-#else
-#include <signal.h>
-libc_hidden_proto(__sigpause)
-libc_hidden_proto(sigblock)
-
-int __libc_pause(void)
+/* Suspend the process until a signal arrives.
+ This always returns -1 and sets errno to EINTR. */
+int
+__libc_pause (void)
{
- return (__sigpause(sigblock(0), 0));
+ sigset_t set;
+
+ __sigemptyset (&set);
+ sigprocmask (SIG_BLOCK, NULL, &set);
+
+ /* pause is a cancellation point, but so is sigsuspend.
+ So no need for anything special here. */
+
+ return sigsuspend (&set);
}
-#endif
-weak_alias(__libc_pause,pause)
+weak_alias (__libc_pause, pause)
+
+LIBC_CANCEL_HANDLED (); /* sigsuspend handles our cancellation. */