X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__wait.c;h=dc33c1a30992e6c04e4482cef8a2f8279d18262a;hb=246f1c811448f37a44b41cd8df8d0ef9736d95f4;hp=8c249cd3538114feea460831b8aaaf8e7cf8daed;hpb=0b44a0315b47dd8eced9f3b7f31580cf14bbfc01;p=musl diff --git a/src/thread/__wait.c b/src/thread/__wait.c index 8c249cd3..dc33c1a3 100644 --- a/src/thread/__wait.c +++ b/src/thread/__wait.c @@ -1,16 +1,17 @@ -#define SYSCALL_RETURN_ERRNO #include "pthread_impl.h" void __wait(volatile int *addr, volatile int *waiters, int val, int priv) { - int spins=50000; - 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) - syscall4(__NR_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); }