summaryrefslogtreecommitdiff
path: root/signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'signal.c')
-rw-r--r--signal.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/signal.c b/signal.c
index 200330d006..b3b389e3f4 100644
--- a/signal.c
+++ b/signal.c
@@ -293,7 +293,12 @@ posix_signal(signum, handler)
sigemptyset(&sigact.sa_mask);
sigact.sa_flags = 0;
#if defined(SA_RESTART)
- sigact.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
+ /* All other signals but VTALRM shall restart restartable syscall
+ VTALRM will cause EINTR to syscall if interrupted.
+ */
+ if (signum != SIGVTALRM) {
+ sigact.sa_flags |= SA_RESTART; /* SVR4, 4.3+BSD */
+ }
#endif
#ifdef SA_NOCLDWAIT
if (signum == SIGCHLD && handler == SIG_IGN)