X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__timedwait.c;h=5c84e80c1ad7556fc0b94b3c46e4a0fa47e33f00;hb=e983aea0aec4b77cd3eb39dabc763b08c4485395;hp=354def2c0f37016ea699fbcf2651dcad7953e582;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/thread/__timedwait.c b/src/thread/__timedwait.c index 354def2c..5c84e80c 100644 --- a/src/thread/__timedwait.c +++ b/src/thread/__timedwait.c @@ -1,11 +1,11 @@ #include #include #include "futex.h" -#define SYSCALL_RETURN_ERRNO #include "syscall.h" #include int __timedwait(volatile int *addr, int val, clockid_t clk, const struct timespec *at, int priv) { + int r; struct timespec to; if (at) { clock_gettime(clk, &to); @@ -17,5 +17,7 @@ int __timedwait(volatile int *addr, int val, clockid_t clk, const struct timespe if (to.tv_sec < 0) return ETIMEDOUT; } if (priv) priv = 128; priv=0; - return syscall4(__NR_futex, (long)addr, FUTEX_WAIT | priv, val, at ? (long)&to : 0); + r = -__syscall(SYS_futex, (long)addr, FUTEX_WAIT | priv, val, at ? (long)&to : 0); + if (r == ETIMEDOUT || r == EINTR) return r; + return 0; }