1 #include "pthread_impl.h"
2 #include "syscall.h"
3 #include <unsupported_api.h>
4 
5 static volatile int check_pi_result = -1;
6 
pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int protocol)7 int 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