X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__wait.c;h=dc33c1a30992e6c04e4482cef8a2f8279d18262a;hb=d055e6a45a17673b8dd3ec16e786bb2fe1700dd5;hp=a1e47804b4416a8ed02e888ebd3757c43381661f;hpb=eca335fc0453d3680fd9f112574919e13fab31d2;p=musl diff --git a/src/thread/__wait.c b/src/thread/__wait.c index a1e47804..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, 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); }