make getaddrinfo support SOCK_RAW and other socket types
[musl] / src / thread / pthread_barrier_wait.c
index 5e60338..e15abb8 100644 (file)
@@ -79,7 +79,7 @@ int pthread_barrier_wait(pthread_barrier_t *b)
        /* First thread to enter the barrier becomes the "instance owner" */
        if (!inst) {
                struct instance new_inst = { 0 };
-               int spins = 10000;
+               int spins = 200;
                b->_b_inst = inst = &new_inst;
                a_store(&b->_b_lock, 0);
                if (b->_b_waiters) __wake(&b->_b_lock, 1, 1);
@@ -87,7 +87,8 @@ int pthread_barrier_wait(pthread_barrier_t *b)
                        a_spin();
                a_inc(&inst->finished);
                while (inst->finished == 1)
-                       __syscall(SYS_futex, &inst->finished, FUTEX_WAIT,1,0);
+                       __syscall(SYS_futex,&inst->finished,FUTEX_WAIT|128,1,0) != -ENOSYS
+                       || __syscall(SYS_futex,&inst->finished,FUTEX_WAIT,1,0);
                return PTHREAD_BARRIER_SERIAL_THREAD;
        }