LibC: Implement pthread_{get,set}attr_default_np
This commit is contained in:
@@ -168,6 +168,8 @@ void pthread_cleanup_push(void (*routine)(void*), void* arg);
|
||||
|
||||
// non portable APIs
|
||||
int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr);
|
||||
int pthread_getattr_default_np(pthread_attr_t* attr);
|
||||
int pthread_setattr_default_np(const pthread_attr_t* attr);
|
||||
|
||||
#define _pthread_equal(t1, t2) ((t1) == (t2))
|
||||
|
||||
|
||||
@@ -20,6 +20,17 @@ struct pthread_trampoline_info_t
|
||||
void* arg;
|
||||
};
|
||||
|
||||
static pthread_attr_t s_default_pthread_attr {
|
||||
.inheritsched = PTHREAD_INHERIT_SCHED,
|
||||
.schedparam = {},
|
||||
.schedpolicy = SCHED_RR,
|
||||
.detachstate = PTHREAD_CREATE_JOINABLE,
|
||||
.scope = PTHREAD_SCOPE_SYSTEM,
|
||||
.stackaddr = nullptr,
|
||||
.stacksize = 8 * 1024 * 1024,
|
||||
.guardsize = static_cast<size_t>(getpagesize()),
|
||||
};
|
||||
|
||||
static void _pthread_cancel_handler(int)
|
||||
{
|
||||
uthread* uthread = _get_uthread();
|
||||
@@ -260,15 +271,7 @@ int pthread_attr_destroy(pthread_attr_t* attr)
|
||||
|
||||
int pthread_attr_init(pthread_attr_t* attr)
|
||||
{
|
||||
*attr = {
|
||||
.inheritsched = PTHREAD_INHERIT_SCHED,
|
||||
.schedparam = {},
|
||||
.schedpolicy = SCHED_RR,
|
||||
.detachstate = PTHREAD_CREATE_JOINABLE,
|
||||
.scope = PTHREAD_SCOPE_SYSTEM,
|
||||
.stacksize = Kernel::Thread::userspace_stack_size,
|
||||
.guardsize = static_cast<size_t>(getpagesize()),
|
||||
};
|
||||
*attr = s_default_pthread_attr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1322,6 +1325,19 @@ int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pthread_getattr_default_np(pthread_attr_t* attr)
|
||||
{
|
||||
*attr = s_default_pthread_attr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int pthread_setattr_default_np(const pthread_attr_t* attr)
|
||||
{
|
||||
// TODO: validate, make thread safe?
|
||||
s_default_pthread_attr = *attr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void load_dynamic_tls_module(size_t module)
|
||||
{
|
||||
auto* uthread = _get_uthread();
|
||||
|
||||
Reference in New Issue
Block a user