From e519f013d707ba810f1c3173681ca9aaadea1520 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Wed, 9 Apr 2025 21:32:06 -0500 Subject: [PATCH] Feature: Update to utilize fll_program_signal_check_loop() and fll_program_signal_check_simple(). Update to utilize the newly added `fll_program_signal_check_loop()` and `fll_program_signal_check_simple()`. Remove all stale and no longer needed signal check defines. --- data/build/stand_alone/configs/tacocat-config.h | 3 ++ .../kevux/tools/tacocat/main/common/define.h | 15 ++++++++-- .../c/program/kevux/tools/tacocat/main/process.c | 6 ++-- .../c/program/kevux/tools/tacocat/main/signal.c | 35 ---------------------- .../c/program/kevux/tools/tacocat/main/signal.h | 34 --------------------- .../c/program/kevux/tools/tacocat/tacocat/main.c | 8 +++-- 6 files changed, 24 insertions(+), 77 deletions(-) diff --git a/data/build/stand_alone/configs/tacocat-config.h b/data/build/stand_alone/configs/tacocat-config.h index 8db32ed..6081797 100644 --- a/data/build/stand_alone/configs/tacocat-config.h +++ b/data/build/stand_alone/configs/tacocat-config.h @@ -2035,6 +2035,9 @@ //#define _di_fll_program_print_version_ //#define _di_fll_program_s_a_ //#define _di_fll_program_s_e_ +//#define _di_fll_program_signal_check_loop_ +//#define _di_fll_program_signal_check_simple_ +//#define _di_fll_program_signal_d_ //#define _di_fll_program_standard_set_down_ //#define _di_fll_program_standard_set_up_ //#define _di_fll_program_standard_signal_handle_ diff --git a/sources/c/program/kevux/tools/tacocat/main/common/define.h b/sources/c/program/kevux/tools/tacocat/main/common/define.h index 40a0939..f65372b 100644 --- a/sources/c/program/kevux/tools/tacocat/main/common/define.h +++ b/sources/c/program/kevux/tools/tacocat/main/common/define.h @@ -46,7 +46,6 @@ extern "C" { * - read: The size to read at a time when processing the packet. * * kt_tacocat_signal_*_d: - * - check: When not using threads, this is how often to perform the check (lower numbers incur more kernel I/O). * - check_failsafe: When using threads, how many consecutive failures to check signal before aborting (as a recursion failsafe). * * kt_tacocat_startup_*_d: @@ -80,8 +79,7 @@ extern "C" { #define kt_tacocat_packet_prebuffer_d 0x200 #define kt_tacocat_packet_read_d 0x8000 - #define kt_tacocat_signal_check_d 0x4e20 - #define kt_tacocat_signal_check_failsafe_d 0x4e20 + #define kt_tacocat_signal_check_failsafe_d 20000 #define kt_tacocat_startup_retry_delay_second_d 3 #define kt_tacocat_startup_retry_delay_millisecond_d 0 @@ -312,6 +310,17 @@ extern "C" { #define kt_tacocat_socket_flag_resend_d 0x10 #endif // _di_kt_tacocat_socket_flag_d_ +/** + * A macro wrapping the appropriate signal check function based on threaded/non-threaded support. + */ +#ifndef _di_kt_tacocat_signal_check_d_ + #ifdef _di_thread_support_ + #define macro_kt_tacocat_signal_check(program, state) fll_program_signal_check_loop(program, state) + #else + #define macro_kt_tacocat_signal_check(program, state) fll_program_signal_check_simple(program, state) + #endif // _di_thread_support_ +#endif // _di_kt_tacocat_signal_check_d_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/sources/c/program/kevux/tools/tacocat/main/process.c b/sources/c/program/kevux/tools/tacocat/main/process.c index fa15c2c..2a6f1b4 100644 --- a/sources/c/program/kevux/tools/tacocat/main/process.c +++ b/sources/c/program/kevux/tools/tacocat/main/process.c @@ -152,7 +152,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->setting.receive.used; ++i) { - if (kt_tacocat_signal_check(main)) return; + if (macro_kt_tacocat_signal_check(&main->program, &main->setting.state)) return; if (F_status_is_error(main->setting.receive.array[i].status)) continue; main->setting.receive.array[i].socket.id = -1; @@ -279,7 +279,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < main->setting.send.used; ++i) { - if (kt_tacocat_signal_check(main)) return; + if (macro_kt_tacocat_signal_check(&main->program, &main->setting.state)) return; if (F_status_is_error(main->setting.send.array[i].status)) continue; main->setting.send.array[i].status = f_socket_create(&main->setting.send.array[i].socket); @@ -413,7 +413,7 @@ extern "C" { for (f_number_unsigned_t i = 0; i < sets.used; ++i) { - if (kt_tacocat_signal_check(main)) return; + if (macro_kt_tacocat_signal_check(&main->program, &main->setting.state)) return; if (F_status_is_error(sets.array[i].status)) { *status = sets.array[i].status; diff --git a/sources/c/program/kevux/tools/tacocat/main/signal.c b/sources/c/program/kevux/tools/tacocat/main/signal.c index 2c61dff..5cea582 100644 --- a/sources/c/program/kevux/tools/tacocat/main/signal.c +++ b/sources/c/program/kevux/tools/tacocat/main/signal.c @@ -4,41 +4,6 @@ extern "C" { #endif -#if !defined(_di_kt_tacocat_signal_check_) && defined(_di_thread_support_) - f_status_t kt_tacocat_signal_check(kt_tacocat_main_t * const main) { - - if (!main) return F_false; - if (main->program.signal_received) return F_true; - - if (!((++main->program.signal_check) % kt_tacocat_signal_check_d)) { - if (F_status_set_fine(fll_program_standard_signal_received(&main->program)) == F_interrupt) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - main->program.signal_check = 0; - } - - return F_false; - } -#endif // !defined(_di_kt_tacocat_signal_check_) && defined(_di_thread_support_) - -#if !defined(_di_kt_tacocat_signal_check_) && !defined(_di_thread_support_) - f_status_t kt_tacocat_signal_check(kt_tacocat_main_t * const main) { - - if (!main) return F_false; - - if (main->program.signal_received) { - main->setting.state.status = F_status_set_error(F_interrupt); - - return F_true; - } - - return F_false; - } -#endif // !defined(_di_kt_tacocat_signal_check_) && !defined(_di_thread_support_) - #if !defined(_di_kt_tacocat_signal_handler_) && !defined(_di_thread_support_) void kt_tacocat_signal_handler(kt_tacocat_main_t * const main) { diff --git a/sources/c/program/kevux/tools/tacocat/main/signal.h b/sources/c/program/kevux/tools/tacocat/main/signal.h index f901100..38eac06 100644 --- a/sources/c/program/kevux/tools/tacocat/main/signal.h +++ b/sources/c/program/kevux/tools/tacocat/main/signal.h @@ -13,40 +13,6 @@ extern "C" { #endif /** - * Check to see if a signal is received. - * - * If main.signal is non-zero, then this handles the following signals: - * - F_signal_abort - * - F_signal_broken_pipe - * - F_signal_hangup - * - F_signal_interrupt - * - F_signal_quit - * - F_signal_termination - * - * There is a threaded and a non-threaded version of this. - * The non-threaded version checks periodically using kt_tacocat_signal_check_d and updates main->signal_check as needed. - * The threaded version checks the flag state which is set by a separate thread that is blocking until signal is received. - * - * @param main - * The main program and settings data. - * - * Must not be NULL. - * - * This does not alter main.setting.state.status. - * - * @return - * F_true on signal received. - * F_false otherwise. - * - * @see kt_tacocat_signal_handler() - * - * @see fll_program_standard_signal_received() - */ -#ifndef _di_kt_tacocat_signal_check_ - extern f_status_t kt_tacocat_signal_check(kt_tacocat_main_t * const main); -#endif // _di_kt_tacocat_signal_check_ - -/** * Signal handler for signals/interrupts. * * This blocks until an expected signal is recieved. diff --git a/sources/c/program/kevux/tools/tacocat/tacocat/main.c b/sources/c/program/kevux/tools/tacocat/tacocat/main.c index 4f9ac28..073bec8 100644 --- a/sources/c/program/kevux/tools/tacocat/tacocat/main.c +++ b/sources/c/program/kevux/tools/tacocat/tacocat/main.c @@ -62,7 +62,7 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { kt_tacocat_setting_load(arguments, &data); } - if (!kt_tacocat_signal_check(&data)) { + if (!macro_kt_tacocat_signal_check(&data.program, &data.setting.state)) { kt_tacocat_main(&data); } @@ -76,7 +76,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { fll_program_standard_set_down(&data.program); - return (F_status_is_error(data.setting.state.status) || data.setting.state.status == F_false) ? 1 : 0; + if (F_status_is_error(data.setting.state.status)) { + return F_status_set_fine(data.setting.state.status) == F_support_not ? 2 : 1; + } + + return data.setting.state.status == F_false ? 1 : 0; } #ifdef __cplusplus -- 1.8.3.1