diff options
author | Rich Felker <dalias@aerifal.cx> | 2011-03-16 11:35:46 -0400 |
---|---|---|
committer | Rich Felker <dalias@aerifal.cx> | 2011-03-16 11:35:46 -0400 |
commit | cc832d8a31e674c3d8ee7168e4a613b5bf8124e0 (patch) | |
tree | f13bcb40285df882b6c189f4b1e9e31ce6caec4d /src/thread/__timedwait.c | |
parent | 4d9cc0b399b1d6a146cb45e64c74b7ee562de7a6 (diff) | |
download | musl-cc832d8a31e674c3d8ee7168e4a613b5bf8124e0.tar.gz |
don't expose EAGAIN, etc. from timed futex wait to caller
Diffstat (limited to 'src/thread/__timedwait.c')
-rw-r--r-- | src/thread/__timedwait.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/thread/__timedwait.c b/src/thread/__timedwait.c index 354def2c..988eb70d 100644 --- a/src/thread/__timedwait.c +++ b/src/thread/__timedwait.c @@ -6,6 +6,7 @@ #include <stdio.h> 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 +18,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 = syscall4(__NR_futex, (long)addr, FUTEX_WAIT | priv, val, at ? (long)&to : 0); + if (r == ETIMEDOUT) return r; + return 0; } |