From b1ccebbd4e558a0df4fce715e83311fe007b8d04 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 14 Dec 2025 18:46:01 -0600 Subject: [PATCH] Update: Provide THREAD_* defines if they do not exist and use the f_thread defines. Make sure all relevant `THREAD_*` are defined and if not, then define them. Do not directly use the `PTHEAD_*` defines. Instead use the ones provided by `f_thread`. --- level_0/f_thread/c/thread/common.h | 74 ++++++++++++++++++++++++++++++++++++ level_3/byte_dump/c/main/thread.c | 2 +- level_3/example/c/main/thread.c | 2 +- level_3/fake/c/main/thread.c | 2 +- level_3/fss_identify/c/main/thread.c | 2 +- level_3/fss_read/c/main/thread.c | 2 +- level_3/fss_write/c/main/thread.c | 2 +- level_3/iki_read/c/main/thread.c | 2 +- level_3/iki_write/c/main/thread.c | 2 +- level_3/status_code/c/main/thread.c | 2 +- level_3/utf8/c/main/thread.c | 2 +- 11 files changed, 84 insertions(+), 10 deletions(-) diff --git a/level_0/f_thread/c/thread/common.h b/level_0/f_thread/c/thread/common.h index 043d6ec..c16a672 100644 --- a/level_0/f_thread/c/thread/common.h +++ b/level_0/f_thread/c/thread/common.h @@ -26,6 +26,22 @@ extern "C" { * - enable: Enable thread cancellation. */ #ifndef _di_f_thread_cancel_d_ + #ifndef PTHREAD_CANCEL_ASYNCHRONOUS + #define PTHREAD_CANCEL_ASYNCHRONOUS 1 + #endif // PTHREAD_CANCEL_ASYNCHRONOUS + + #ifndef PTHREAD_CANCEL_DEFERRED + #define PTHREAD_CANCEL_DEFERRED 0 + #endif // PTHREAD_CANCEL_DEFERRED + + #ifndef PTHREAD_CANCEL_DISABLE + #define PTHREAD_CANCEL_DISABLE 1 + #endif // PTHREAD_CANCEL_DISABLE + + #ifndef PTHREAD_CANCEL_ENABLE + #define PTHREAD_CANCEL_ENABLE 0 + #endif // PTHREAD_CANCEL_ENABLE + #define f_thread_cancel_asynchronous_d PTHREAD_CANCEL_ASYNCHRONOUS #define f_thread_cancel_defer_d PTHREAD_CANCEL_DEFERRED #define f_thread_cancel_disable_d PTHREAD_CANCEL_DISABLE @@ -41,6 +57,18 @@ extern "C" { * - protect: Use protect protocol; use explicitly defined priority ceiling settings. */ #ifndef _di_f_thread_mutex_protocol_d_ + #ifndef PTHREAD_PRIO_INHERIT + #define PTHREAD_PRIO_INHERIT 1 + #endif // PTHREAD_PRIO_INHERIT + + #ifndef PTHREAD_PRIO_NONE + #define PTHREAD_PRIO_NONE 0 + #endif // PTHREAD_PRIO_NONE + + #ifndef PTHREAD_PRIO_PROTECT + #define PTHREAD_PRIO_PROTECT 2 + #endif // PTHREAD_PRIO_PROTECT + #define f_thread_mutex_protocol_inherit_d PTHREAD_PRIO_INHERIT #define f_thread_mutex_protocol_none_d PTHREAD_PRIO_NONE #define f_thread_mutex_protocol_protect_d PTHREAD_PRIO_PROTECT @@ -54,6 +82,14 @@ extern "C" { * - stalled: The thread is considered to be in a stalled state. */ #ifndef _di_f_thread_mutex_robust_d_ + #ifndef PTHREAD_MUTEX_ROBUST + #define PTHREAD_MUTEX_ROBUST 1 + #endif // PTHREAD_MUTEX_ROBUST + + #ifndef PTHREAD_MUTEX_STALLED + #define PTHREAD_MUTEX_STALLED 0 + #endif // PTHREAD_MUTEX_STALLED + #define f_thread_mutex_robust_okay_d PTHREAD_MUTEX_ROBUST #define f_thread_mutex_robust_stalled_d PTHREAD_MUTEX_STALLED #endif // _di_f_thread_mutex_robust_d_ @@ -67,6 +103,20 @@ extern "C" { * - recursive: Recursive lock (uses a count on locks, mutexs become unlocked when count is 0). */ #ifndef _di_f_thread_mutex_type_d_ + #ifndef PTHREAD_MUTEX_ERRORCHECK + #define PTHREAD_MUTEX_ERRORCHECK 2 + #endif // PTHREAD_MUTEX_ERRORCHECK + + + #ifndef PTHREAD_MUTEX_RECURSIVE + #define PTHREAD_MUTEX_RECURSIVE 1 + #endif // PTHREAD_MUTEX_RECURSIVE + + + #ifndef PTHREAD_MUTEX_NORMAL + #define PTHREAD_MUTEX_NORMAL 0 + #endif // PTHREAD_MUTEX_NORMAL + #define f_thread_mutex_type_error_check_d PTHREAD_MUTEX_ERRORCHECK #define f_thread_mutex_type_normal_d PTHREAD_MUTEX_RECURSIVE #define f_thread_mutex_type_recursive_d PTHREAD_MUTEX_NORMAL @@ -80,6 +130,14 @@ extern "C" { * - shared: The mutex is shared between any threads with memory access to the mutex object (even across processes). */ #ifndef _di_f_thread_process_d_ + #ifndef PTHREAD_PROCESS_PRIVATE + #define PTHREAD_PROCESS_PRIVATE 0 + #endif // PTHREAD_PROCESS_PRIVATE + + #ifndef PTHREAD_PROCESS_SHARED + #define PTHREAD_PROCESS_SHARED 1 + #endif // PTHREAD_PROCESS_SHARED + #define f_thread_process_private_d PTHREAD_PROCESS_PRIVATE #define f_thread_process_shared_d PTHREAD_PROCESS_SHARED #endif // _di_f_thread_process_d_ @@ -92,6 +150,14 @@ extern "C" { * - inherit: Use the scheduling from a parent thread or process. */ #ifndef _di_f_thread_schedule_d_ + #ifndef PTHREAD_EXPLICIT_SCHED + #define PTHREAD_EXPLICIT_SCHED 1 + #endif // PTHREAD_EXPLICIT_SCHED + + #ifndef PTHREAD_INHERIT_SCHED + #define PTHREAD_INHERIT_SCHED 0 + #endif // PTHREAD_INHERIT_SCHED + #define f_thread_schedule_explicit_d PTHREAD_EXPLICIT_SCHED #define f_thread_schedule_inherit_d PTHREAD_INHERIT_SCHED #endif // _di_f_thread_schedule_d_ @@ -104,6 +170,14 @@ extern "C" { * - system: The thread vies for resources with all processes on the system with the same scheduling domain. */ #ifndef _di_f_thread_scope_d_ + #ifndef PTHREAD_SCOPE_PROCESS + #define PTHREAD_SCOPE_PROCESS 1 + #endif // PTHREAD_SCOPE_PROCESS + + #ifndef PTHREAD_SCOPE_SYSTEM + #define PTHREAD_SCOPE_SYSTEM 0 + #endif // PTHREAD_SCOPE_SYSTEM + #define f_thread_scope_process_d PTHREAD_SCOPE_PROCESS #define f_thread_scope_system_d PTHREAD_SCOPE_SYSTEM #endif // _di_f_thread_scope_d_ diff --git a/level_3/byte_dump/c/main/thread.c b/level_3/byte_dump/c/main/thread.c index 6d8d4c9..abace1d 100644 --- a/level_3/byte_dump/c/main/thread.c +++ b/level_3/byte_dump/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_byte_dump_thread_signal_) && !defined(_di_thread_support_) void * byte_dump_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { byte_dump_signal_handler((byte_dump_main_t *) main); diff --git a/level_3/example/c/main/thread.c b/level_3/example/c/main/thread.c index 2c302a3..20d7708 100644 --- a/level_3/example/c/main/thread.c +++ b/level_3/example/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_example_thread_signal_) && !defined(_di_thread_support_) void * example_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { example_signal_handler((example_main_t *) main); diff --git a/level_3/fake/c/main/thread.c b/level_3/fake/c/main/thread.c index 5cbbefe..3496a7c 100644 --- a/level_3/fake/c/main/thread.c +++ b/level_3/fake/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_fake_thread_signal_) && !defined(_di_thread_support_) void * fake_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { fake_signal_handler((fake_main_t *) main); diff --git a/level_3/fss_identify/c/main/thread.c b/level_3/fss_identify/c/main/thread.c index 6f9c1c9..015480f 100644 --- a/level_3/fss_identify/c/main/thread.c +++ b/level_3/fss_identify/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_fss_identify_thread_signal_) && !defined(_di_thread_support_) void * fss_identify_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { fss_identify_signal_handler((fss_identify_main_t *) main); diff --git a/level_3/fss_read/c/main/thread.c b/level_3/fss_read/c/main/thread.c index c18ada8..81ef5d6 100644 --- a/level_3/fss_read/c/main/thread.c +++ b/level_3/fss_read/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_fss_read_thread_signal_) && !defined(_di_thread_support_) void * fss_read_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { fss_read_signal_handler((fss_read_main_t *) main); diff --git a/level_3/fss_write/c/main/thread.c b/level_3/fss_write/c/main/thread.c index 9238266..f0db296 100644 --- a/level_3/fss_write/c/main/thread.c +++ b/level_3/fss_write/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_fss_write_thread_signal_) && !defined(_di_thread_support_) void * fss_write_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { fss_write_signal_handler((fss_write_main_t *) main); diff --git a/level_3/iki_read/c/main/thread.c b/level_3/iki_read/c/main/thread.c index 449842c..87f7dc0 100644 --- a/level_3/iki_read/c/main/thread.c +++ b/level_3/iki_read/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_iki_read_thread_signal_) && !defined(_di_thread_support_) void * iki_read_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { iki_read_signal_handler((iki_read_main_t *) main); diff --git a/level_3/iki_write/c/main/thread.c b/level_3/iki_write/c/main/thread.c index f4aff1b..99f10a5 100644 --- a/level_3/iki_write/c/main/thread.c +++ b/level_3/iki_write/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_iki_write_thread_signal_) && !defined(_di_thread_support_) void * iki_write_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { iki_write_signal_handler((iki_write_main_t *) main); diff --git a/level_3/status_code/c/main/thread.c b/level_3/status_code/c/main/thread.c index e01e9ae..7abdd60 100644 --- a/level_3/status_code/c/main/thread.c +++ b/level_3/status_code/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_status_code_thread_signal_) && !defined(_di_thread_support_) void * status_code_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { status_code_signal_handler((status_code_main_t *) main); diff --git a/level_3/utf8/c/main/thread.c b/level_3/utf8/c/main/thread.c index ba7b349..8c877f0 100644 --- a/level_3/utf8/c/main/thread.c +++ b/level_3/utf8/c/main/thread.c @@ -7,7 +7,7 @@ extern "C" { #if !defined(_di_utf8_thread_signal_) && !defined(_di_thread_support_) void * utf8_thread_signal(void * const main) { - f_thread_cancel_state_set(PTHREAD_CANCEL_DEFERRED, 0); + f_thread_cancel_state_set(f_thread_cancel_defer_d, 0); if (main) { utf8_signal_handler((utf8_main_t *) main); -- 1.8.3.1