X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fthread%2F__wait.c;h=dc33c1a30992e6c04e4482cef8a2f8279d18262a;hb=a75283d777ed1827ed247dbb465818a0ce371c8f;hp=b0969bb2c879223013603f19b3adc5c4250b1966;hpb=685e40bb09f5f24a2af54ea09c97328808f76990;p=musl diff --git a/src/thread/__wait.c b/src/thread/__wait.c index b0969bb2..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=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) - __syscall(__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); }