From: Rich Felker Date: Thu, 10 Mar 2011 15:43:09 +0000 (-0500) Subject: don't fail with EINTR in sigtimedwait X-Git-Tag: v0.7.0~19 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=0a949ebdf0b9fc054ea868bd049c8f2c7aed973e;p=oweals%2Fmusl.git don't fail with EINTR in sigtimedwait POSIX allows either behavior, but sigwait is not allowed to fail with EINTR, so the retry loop would have to be in one or the other anyway. --- diff --git a/src/signal/sigtimedwait.c b/src/signal/sigtimedwait.c index 155185de..0a7c5eac 100644 --- a/src/signal/sigtimedwait.c +++ b/src/signal/sigtimedwait.c @@ -1,12 +1,12 @@ #include +#include #include "syscall.h" int sigtimedwait(const sigset_t *mask, siginfo_t *si, const struct timespec *timeout) { - long k_timeout[2]; - if (timeout) { - k_timeout[0] = timeout->tv_sec; - k_timeout[1] = timeout->tv_nsec; - } - return syscall4(__NR_rt_sigtimedwait, (long)mask, (long)si, timeout ? (long)k_timeout : 0, SYSCALL_SIGSET_SIZE); + int ret; + do { + ret = syscall4(__NR_rt_sigtimedwait, (long)mask, (long)si, (long)timeout, SYSCALL_SIGSET_SIZE); + } while (ret<0 && errno==EINTR); + return ret; }