X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;f=src%2Fthread%2F__wait.c;h=dc33c1a30992e6c04e4482cef8a2f8279d18262a;hb=1ef37aa00ea830dfda76e04e3d941cafa74d8b76;hp=ec1e82064a44f6299e4eb543318875af35912aff;hpb=bc09d58c0432a4eca5f6a1e536679a527f971116;p=musl diff --git a/src/thread/__wait.c b/src/thread/__wait.c index ec1e8206..dc33c1a3 100644 --- a/src/thread/__wait.c +++ b/src/thread/__wait.c @@ -2,15 +2,15 @@ void __wait(volatile int *addr, volatile int *waiters, int val, int priv) { - int spins=10000; - if (priv) priv = 128; - 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) != -EINVAL + __syscall(SYS_futex, addr, FUTEX_WAIT|priv, val, 0) != -ENOSYS || __syscall(SYS_futex, addr, FUTEX_WAIT, val, 0); } if (waiters) a_dec(waiters);