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