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