1 #include "pthread_impl.h"
2 #include "lock.h"
3
pthread_getschedparam(pthread_t t,int * restrict policy,struct sched_param * restrict param)4 int pthread_getschedparam(pthread_t t, int *restrict policy, struct sched_param *restrict param)
5 {
6 int r;
7 sigset_t set;
8 __block_app_sigs(&set);
9 LOCK(t->killlock);
10 if (!t->tid) {
11 r = ESRCH;
12 } else {
13 #ifdef __LITEOS_A__
14 r = __syscall(SYS_sched_getparam, t->tid, param, MUSL_TYPE_THREAD);
15 if (r >= 0) {
16 r = __syscall(SYS_sched_getscheduler, t->tid, MUSL_TYPE_THREAD);
17 if (r >= 0) {
18 *policy = r;
19 r = 0;
20 }
21 }
22
23 if (r < 0) {
24 r = -r;
25 }
26 #else
27 r = -__syscall(SYS_sched_getparam, t->tid, param);
28 if (!r) {
29 *policy = __syscall(SYS_sched_getscheduler, t->tid);
30 }
31 #endif
32 }
33 UNLOCK(t->killlock);
34 __restore_sigs(&set);
35 return r;
36 }
37