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.
//#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_
* - 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:
#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
#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
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;
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);
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;
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) {
#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.
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);
}
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