From c0e091b647b3637cf21fcd579f59ccb0b0cee185 Mon Sep 17 00:00:00 2001 From: Bananymous Date: Thu, 2 Jul 2026 19:50:07 +0300 Subject: [PATCH] LibC: Implement pthread_{get,set}attr_default_np --- userspace/libraries/LibC/include/pthread.h | 2 ++ userspace/libraries/LibC/pthread.cpp | 34 ++++++++++++++++------ 2 files changed, 27 insertions(+), 9 deletions(-) diff --git a/userspace/libraries/LibC/include/pthread.h b/userspace/libraries/LibC/include/pthread.h index afc8e65d..ecddc579 100644 --- a/userspace/libraries/LibC/include/pthread.h +++ b/userspace/libraries/LibC/include/pthread.h @@ -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)) diff --git a/userspace/libraries/LibC/pthread.cpp b/userspace/libraries/LibC/pthread.cpp index 68c98d02..81418b00 100644 --- a/userspace/libraries/LibC/pthread.cpp +++ b/userspace/libraries/LibC/pthread.cpp @@ -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(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(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();