X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__wait.c;h=dc33c1a30992e6c04e4482cef8a2f8279d18262a;hb=b19fa247831bedd78fe4a671786883a25ddb6ca1;hp=041a0669a0587644e4f8347d8d8a76866b8a9672;hpb=77f15d108ee021d4dfbeebe793661131c4470d4d;p=musl diff --git a/src/thread/__wait.c b/src/thread/__wait.c index 041a0669..dc33c1a3 100644 --- a/src/thread/__wait.c +++ b/src/thread/__wait.c @@ -2,14 +2,16 @@ void __wait(volatile int *addr, volatile int *waiters, int val, int priv) { - int spins=10000; - if (priv) priv = 128; priv=0; - while (spins--) { + int spins=100; + if (priv) priv = FUTEX_PRIVATE; + while (spins-- && (!waiters || !*waiters)) { if (*addr==val) a_spin(); else return; } if (waiters) a_inc(waiters); - while (*addr==val) - __syscall(SYS_futex, (long)addr, FUTEX_WAIT|priv, val, 0); + while (*addr==val) { + __syscall(SYS_futex, addr, FUTEX_WAIT|priv, val, 0) != -ENOSYS + || __syscall(SYS_futex, addr, FUTEX_WAIT, val, 0); + } if (waiters) a_dec(waiters); }