correctly handle old kernels without FUTEX_WAIT_BITSET
futex returns EINVAL, not ENOSYS, when op is not supported. unfortunately this looks just like EINVAL from other causes, and we end up running the fallback code and getting EINVAL again. fortunately this case should be rare since correct code should not generate EINVAL anyway.
This commit is contained in:
parent
bdd893377f
commit
4717bfec70
1 changed files with 1 additions and 1 deletions
|
|
@ -16,7 +16,7 @@ static int do_wait(volatile int *addr, int val, clockid_t clk, const struct time
|
|||
if (clk == CLOCK_REALTIME) flag = FUTEX_CLOCK_REALTIME;
|
||||
if (cp) r = -__syscall_cp(SYS_futex, addr, FUTEX_WAIT_BITSET|flag, val, at, 0, -1);
|
||||
else r = -__syscall(SYS_futex, addr, FUTEX_WAIT_BITSET|flag, val, at, 0, -1);
|
||||
if (r != ENOSYS) goto done;
|
||||
if (r != EINVAL) goto done;
|
||||
}
|
||||
if (clock_gettime(clk, &to)) return EINVAL;
|
||||
to.tv_sec = at->tv_sec - to.tv_sec;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue