#include "pthread_impl.h" #include "syscall.h" static volatile int check_pi_result = -1; int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol) { int r; switch (protocol) { case PTHREAD_PRIO_NONE: a->__attr &= ~8; return 0; case PTHREAD_PRIO_INHERIT: r = check_pi_result; if (r < 0) { volatile int lk = 0; r = -__syscall(SYS_futex, &lk, FUTEX_LOCK_PI, 0, 0); a_store(&check_pi_result, r); } if (r) return r; a->__attr |= 8; return 0; case PTHREAD_PRIO_PROTECT: return ENOTSUP; default: return EINVAL; } }