From 66f43e90823f75ba7261de2abaf0e809b47a2c65 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 7 Apr 2024 20:53:03 -0500 Subject: [PATCH] Update: Add support for disable pthread mutex prioceiling for systems that do not support it. The pthread mutex prioceiling functions are not supported on PostmarketOS for Pinephone. The PostmarketOS for Pinephone is an A64 Arm system based on the Alpine Linux distribution. --- level_0/f_thread/c/thread.c | 25 +++++++++++++++++++++---- level_0/f_thread/data/build/defines | 1 + 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/level_0/f_thread/c/thread.c b/level_0/f_thread/c/thread.c index c9344ef..3edcb96 100644 --- a/level_0/f_thread/c/thread.c +++ b/level_0/f_thread/c/thread.c @@ -1625,7 +1625,16 @@ extern "C" { } #endif // _di_f_thread_mutex_lock_try_ -#ifndef _di_f_thread_mutex_priority_ceiling_get_ +#if defined(_pthread_mutex_prioceiling_unsupported_) && !defined(_di_f_thread_mutex_priority_ceiling_get_) + f_status_t f_thread_mutex_priority_ceiling_get(f_thread_mutex_t * const mutex, int * const ceiling) { + #ifndef _di_level_0_parameter_checking_ + if (!mutex) return F_status_set_error(F_parameter); + if (!ceiling) return F_status_set_error(F_parameter); + #endif // _di_level_0_parameter_checking_ + + return F_status_set_error(F_implement_not); + } +#elif !defined(_di_f_thread_mutex_priority_ceiling_get_) f_status_t f_thread_mutex_priority_ceiling_get(f_thread_mutex_t * const mutex, int * const ceiling) { #ifndef _di_level_0_parameter_checking_ if (!mutex) return F_status_set_error(F_parameter); @@ -1643,9 +1652,17 @@ extern "C" { return F_okay; } -#endif // _di_f_thread_mutex_priority_ceiling_get_ +#endif // defined(_pthread_mutex_prioceiling_unsupported_) && !defined(_di_f_thread_mutex_priority_ceiling_get_) -#ifndef _di_f_thread_mutex_priority_ceiling_set_ +#if defined(_pthread_mutex_prioceiling_unsupported_) && !defined(_di_f_thread_mutex_priority_ceiling_set_) + f_status_t f_thread_mutex_priority_ceiling_set(const int ceiling, f_thread_mutex_t * const mutex, int * const previous) { + #ifndef _di_level_0_parameter_checking_ + if (!mutex) return F_status_set_error(F_parameter); + #endif // _di_level_0_parameter_checking_ + + return F_status_set_error(F_implement_not); + } +#elif !defined(_di_f_thread_mutex_priority_ceiling_set_) f_status_t f_thread_mutex_priority_ceiling_set(const int ceiling, f_thread_mutex_t * const mutex, int * const previous) { #ifndef _di_level_0_parameter_checking_ if (!mutex) return F_status_set_error(F_parameter); @@ -1666,7 +1683,7 @@ extern "C" { return F_okay; } -#endif // _di_f_thread_mutex_priority_ceiling_set_ +#endif // defined(_pthread_mutex_prioceiling_unsupported_) && !defined(_di_f_thread_mutex_priority_ceiling_set_) #ifndef _di_f_thread_mutex_unlock_ f_status_t f_thread_mutex_unlock(f_thread_mutex_t * const mutex) { diff --git a/level_0/f_thread/data/build/defines b/level_0/f_thread/data/build/defines index 29febee..a7c99da 100644 --- a/level_0/f_thread/data/build/defines +++ b/level_0/f_thread/data/build/defines @@ -2,4 +2,5 @@ _di_thread_support_ disables thread support, which is intended to disable this entire f_thread project. This is not directly used by this library, but is instead used by other libraries to not include f_thread (such as special compilations like monolithic). Future versions may potentially support this, providing stubs. _pthread_attr_unsupported_ Disable non-portable functionality associated with pthread_attr. +_pthread_mutex_prioceiling_unsupported_ Disable mutex_prioceiling related functionality for systems that do not support it. _pthread_sigqueue_unsupported_ Disable GNU specific sigqueue(). -- 1.8.3.1