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