blob: 605af973fb5598e6b2a34a0789e54373e8216426 (
plain) (
tree)
|
|
#include "pthread_impl.h"
#include "syscall.h"
#include "libc.h"
hidden void *__start_sched(void *p)
{
struct start_sched_args *ssa = p;
void *start_arg = ssa->start_arg;
void *(*start_fn)(void *) = ssa->start_fn;
pthread_t self = __pthread_self();
int ret = -__syscall(SYS_sched_setscheduler, self->tid,
ssa->attr->_a_policy, &ssa->attr->_a_prio);
if (!ret) __restore_sigs(&ssa->mask);
a_store(&ssa->futex, ret);
__wake(&ssa->futex, 1, 1);
if (ret) {
self->detach_state = DT_DYNAMIC;
return 0;
}
return start_fn(start_arg);
}
int pthread_attr_setinheritsched(pthread_attr_t *a, int inherit)
{
if (inherit > 1U) return EINVAL;
a->_a_sched = inherit;
return 0;
}
|