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
|
// non portable APIs
|
||||||
int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr);
|
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))
|
#define _pthread_equal(t1, t2) ((t1) == (t2))
|
||||||
|
|
||||||
|
|||||||
@@ -20,6 +20,17 @@ struct pthread_trampoline_info_t
|
|||||||
void* arg;
|
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)
|
static void _pthread_cancel_handler(int)
|
||||||
{
|
{
|
||||||
uthread* uthread = _get_uthread();
|
uthread* uthread = _get_uthread();
|
||||||
@@ -260,15 +271,7 @@ int pthread_attr_destroy(pthread_attr_t* attr)
|
|||||||
|
|
||||||
int pthread_attr_init(pthread_attr_t* attr)
|
int pthread_attr_init(pthread_attr_t* attr)
|
||||||
{
|
{
|
||||||
*attr = {
|
*attr = s_default_pthread_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()),
|
|
||||||
};
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1322,6 +1325,19 @@ int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr)
|
|||||||
return 0;
|
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)
|
static void load_dynamic_tls_module(size_t module)
|
||||||
{
|
{
|
||||||
auto* uthread = _get_uthread();
|
auto* uthread = _get_uthread();
|
||||||
|
|||||||
Reference in New Issue
Block a user