1 #include "pthread_impl.h" 2 #include "syscall.h" 3 4 static pthread_once_t check_pi_once; 5 static int check_pi_result; 6 check_pi()7static void check_pi() 8 { 9 volatile int lk = 0; 10 check_pi_result = -__syscall(SYS_futex, &lk, FUTEX_LOCK_PI, 0, 0); 11 } 12 pthread_mutexattr_setprotocol(pthread_mutexattr_t * a,int protocol)13int pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol) 14 { 15 switch (protocol) { 16 case PTHREAD_PRIO_NONE: 17 a->__attr &= ~8; 18 return 0; 19 case PTHREAD_PRIO_INHERIT: 20 pthread_once(&check_pi_once, check_pi); 21 if (check_pi_result) return check_pi_result; 22 a->__attr |= 8; 23 return 0; 24 case PTHREAD_PRIO_PROTECT: 25 return ENOTSUP; 26 default: 27 return EINVAL; 28 } 29 } 30