From 2d77cca584f7b33f824b6f41d2ae26be69a2eed4 Mon Sep 17 00:00:00 2001 From: lohhiiccc <96543753+lohhiiccc@users.noreply.github.com> Date: Tue, 17 Mar 2026 09:37:39 -0500 Subject: [PATCH] refactor(scheduler): split scheduler into 3 files --- sources/ping.mk | 114 +++++++++--------- src/ping/scheduler/scheduler_arm.c | 19 +++ .../{scheduler.c => scheduler_init.c} | 60 +++------ src/ping/scheduler/scheduler_select_tv.c | 9 ++ 4 files changed, 104 insertions(+), 98 deletions(-) create mode 100644 src/ping/scheduler/scheduler_arm.c rename src/ping/scheduler/{scheduler.c => scheduler_init.c} (50%) create mode 100644 src/ping/scheduler/scheduler_select_tv.c diff --git a/sources/ping.mk b/sources/ping.mk index e54eda2..68c2a47 100644 --- a/sources/ping.mk +++ b/sources/ping.mk @@ -3,64 +3,66 @@ include sources/cli.mk PING_SRC_DIR = src/ping PING_SRCS = $(CLI_SRCS) \ - $(PING_SRC_DIR)/main.c \ - $(PING_SRC_DIR)/cli/parse.c \ - $(PING_SRC_DIR)/cli/handlers/handle_count.c \ - $(PING_SRC_DIR)/cli/handlers/handle_dont_fragment.c \ - $(PING_SRC_DIR)/cli/handlers/handle_deadline.c \ - $(PING_SRC_DIR)/cli/handlers/handle_flood.c \ - $(PING_SRC_DIR)/cli/handlers/handle_help.c \ - $(PING_SRC_DIR)/cli/handlers/handle_interval.c \ - $(PING_SRC_DIR)/cli/handlers/handle_quiet.c \ - $(PING_SRC_DIR)/cli/handlers/option_map.c \ - $(PING_SRC_DIR)/cli/handlers/handle_size.c \ - $(PING_SRC_DIR)/cli/handlers/handle_timeout.c \ - $(PING_SRC_DIR)/cli/handlers/handle_ttl.c \ - $(PING_SRC_DIR)/cli/handlers/handle_version.c \ - $(PING_SRC_DIR)/cli/handlers/handle_verbose.c \ - $(PING_SRC_DIR)/cli/parse_utils/parse_inet_addr.c \ - $(PING_SRC_DIR)/cli/parse_utils/parse_destinations.c \ - $(PING_SRC_DIR)/cli/config_free.c \ - $(PING_SRC_DIR)/cli/messages/help.c \ - $(PING_SRC_DIR)/cli/messages/version.c \ - $(PING_SRC_DIR)/cli/messages/error.c \ - $(PING_SRC_DIR)/core/ping.c \ - $(PING_SRC_DIR)/core/loop.c \ - $(PING_SRC_DIR)/core/send.c \ - $(PING_SRC_DIR)/core/callback.c \ - $(PING_SRC_DIR)/tracker/init.c \ - $(PING_SRC_DIR)/tracker/record_send.c \ - $(PING_SRC_DIR)/tracker/record_recv.c \ - $(PING_SRC_DIR)/output/start.c \ - $(PING_SRC_DIR)/output/packet.c \ - $(PING_SRC_DIR)/output/error.c \ - $(PING_SRC_DIR)/output/summary.c \ - $(PING_SRC_DIR)/output/flood.c \ - $(PING_SRC_DIR)/scheduler/scheduler.c \ - $(PING_SRC_DIR)/stats/stats_get.c \ - $(PING_SRC_DIR)/stats/stats_init.c \ - $(PING_SRC_DIR)/stats/stats_update.c \ + $(PING_SRC_DIR)/main.c \ + $(PING_SRC_DIR)/cli/parse.c \ + $(PING_SRC_DIR)/cli/handlers/handle_count.c \ + $(PING_SRC_DIR)/cli/handlers/handle_dont_fragment.c \ + $(PING_SRC_DIR)/cli/handlers/handle_deadline.c \ + $(PING_SRC_DIR)/cli/handlers/handle_flood.c \ + $(PING_SRC_DIR)/cli/handlers/handle_help.c \ + $(PING_SRC_DIR)/cli/handlers/handle_interval.c \ + $(PING_SRC_DIR)/cli/handlers/handle_quiet.c \ + $(PING_SRC_DIR)/cli/handlers/option_map.c \ + $(PING_SRC_DIR)/cli/handlers/handle_size.c \ + $(PING_SRC_DIR)/cli/handlers/handle_timeout.c \ + $(PING_SRC_DIR)/cli/handlers/handle_ttl.c \ + $(PING_SRC_DIR)/cli/handlers/handle_version.c \ + $(PING_SRC_DIR)/cli/handlers/handle_verbose.c \ + $(PING_SRC_DIR)/cli/parse_utils/parse_inet_addr.c \ + $(PING_SRC_DIR)/cli/parse_utils/parse_destinations.c \ + $(PING_SRC_DIR)/cli/config_free.c \ + $(PING_SRC_DIR)/cli/messages/help.c \ + $(PING_SRC_DIR)/cli/messages/version.c \ + $(PING_SRC_DIR)/cli/messages/error.c \ + $(PING_SRC_DIR)/core/ping.c \ + $(PING_SRC_DIR)/core/loop.c \ + $(PING_SRC_DIR)/core/send.c \ + $(PING_SRC_DIR)/core/callback.c \ + $(PING_SRC_DIR)/tracker/init.c \ + $(PING_SRC_DIR)/tracker/record_send.c \ + $(PING_SRC_DIR)/tracker/record_recv.c \ + $(PING_SRC_DIR)/output/start.c \ + $(PING_SRC_DIR)/output/packet.c \ + $(PING_SRC_DIR)/output/error.c \ + $(PING_SRC_DIR)/output/summary.c \ + $(PING_SRC_DIR)/output/flood.c \ + $(PING_SRC_DIR)/scheduler/scheduler_arm.c \ + $(PING_SRC_DIR)/scheduler/scheduler_select_tv.c \ + $(PING_SRC_DIR)/scheduler/scheduler_init.c \ + $(PING_SRC_DIR)/stats/stats_get.c \ + $(PING_SRC_DIR)/stats/stats_init.c \ + $(PING_SRC_DIR)/stats/stats_update.c \ PING_TESTS_DIR = tests PING_TESTS = $(PING_TESTS_DIR)/test_main.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_count.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_flood.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_help.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_interval.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_quiet.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handler_map.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_size.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_timeout.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_ttl.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_version.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_verbose.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_dont_fragment.c \ - $(PING_TESTS_DIR)/cli/handlers/test_handle_deadline.c \ - $(PING_TESTS_DIR)/cli/parse_utils/test_parse_int.c \ - $(PING_TESTS_DIR)/cli/parse_utils/test_parse_float.c \ - $(PING_TESTS_DIR)/cli/parse_utils/test_parse_inet_addr.c \ - $(PING_TESTS_DIR)/cli/parse_utils/test_parse_destinations.c \ - $(PING_TESTS_DIR)/ping/stats/test_stats.c \ - $(PING_TESTS_DIR)/ping/tracker/test_tracker.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_count.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_flood.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_help.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_interval.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_quiet.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handler_map.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_size.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_timeout.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_ttl.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_version.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_verbose.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_dont_fragment.c \ + $(PING_TESTS_DIR)/cli/handlers/test_handle_deadline.c \ + $(PING_TESTS_DIR)/cli/parse_utils/test_parse_int.c \ + $(PING_TESTS_DIR)/cli/parse_utils/test_parse_float.c \ + $(PING_TESTS_DIR)/cli/parse_utils/test_parse_inet_addr.c \ + $(PING_TESTS_DIR)/cli/parse_utils/test_parse_destinations.c \ + $(PING_TESTS_DIR)/ping/stats/test_stats.c \ + $(PING_TESTS_DIR)/ping/tracker/test_tracker.c \ diff --git a/src/ping/scheduler/scheduler_arm.c b/src/ping/scheduler/scheduler_arm.c new file mode 100644 index 0000000..9b753e1 --- /dev/null +++ b/src/ping/scheduler/scheduler_arm.c @@ -0,0 +1,19 @@ +#include "ping/ft_ping_flags.h" +#include "internal/ping/scheduler.h" + +void +ping_scheduler_arm(const struct ping_config *config) +{ + struct itimerval itv; + double interval; + + if (HAS_FLAG(config->flags, FLAG_FLOOD)) + return; + interval = (double)config->interval; + itv.it_value.tv_sec = (time_t)interval; + itv.it_value.tv_usec = (suseconds_t)((interval - (double)(time_t)interval) + * 1e6); + itv.it_interval.tv_sec = 0; + itv.it_interval.tv_usec = 0; + setitimer(ITIMER_REAL, &itv, NULL); +} diff --git a/src/ping/scheduler/scheduler.c b/src/ping/scheduler/scheduler_init.c similarity index 50% rename from src/ping/scheduler/scheduler.c rename to src/ping/scheduler/scheduler_init.c index fbc5019..fe472ed 100644 --- a/src/ping/scheduler/scheduler.c +++ b/src/ping/scheduler/scheduler_init.c @@ -1,14 +1,13 @@ #include "compiler.h" -#include "ping/ft_ping_flags.h" #include "internal/ping/scheduler.h" /* Forward declarations */ -static void sigalrm_handler(int sig); -static void sigint_handler(int sig); +static void inline sigint_handler(int sig); +static void inline sigalrm_handler(int sig); static void install_signal(int signum, void (*handler)(int)); -/* -------------------- */ static struct ping_state *g_state = NULL; +/* -------------------- */ void ping_scheduler_init(struct ping_state *state) @@ -18,44 +17,6 @@ ping_scheduler_init(struct ping_state *state) install_signal(SIGINT, sigint_handler); } -void -ping_scheduler_arm(const struct ping_config *config) -{ - struct itimerval itv; - double interval; - - if (HAS_FLAG(config->flags, FLAG_FLOOD)) - return; - interval = (double)config->interval; - itv.it_value.tv_sec = (time_t)interval; - itv.it_value.tv_usec = (suseconds_t)((interval - (double)(time_t)interval) - * 1e6); - itv.it_interval.tv_sec = 0; - itv.it_interval.tv_usec = 0; - setitimer(ITIMER_REAL, &itv, NULL); -} - -void -ping_scheduler_select_tv(const struct ping_config *config, struct timeval *tv) -{ - tv->tv_usec = 0; - tv->tv_sec = (long)config->timeout * !HAS_FLAG(config->flags, FLAG_FLOOD); -} - -static void -sigalrm_handler(__unused int sig) -{ - if (NULL != g_state) - g_state->send_flag = 1; -} - -static void -sigint_handler(__unused int sig) -{ - if (NULL != g_state) - g_state->stop_flag = 1; -} - static void install_signal(int signum, void (*handler)(int)) { @@ -66,3 +27,18 @@ install_signal(int signum, void (*handler)(int)) sa.sa_flags = 0; sigaction(signum, &sa, NULL); } + +static void inline +sigalrm_handler(__unused int sig) +{ + if (NULL != g_state) + g_state->send_flag = 1; +} + +static void inline +sigint_handler(__unused int sig) +{ + if (NULL != g_state) + g_state->stop_flag = 1; +} + diff --git a/src/ping/scheduler/scheduler_select_tv.c b/src/ping/scheduler/scheduler_select_tv.c new file mode 100644 index 0000000..3f1dbd9 --- /dev/null +++ b/src/ping/scheduler/scheduler_select_tv.c @@ -0,0 +1,9 @@ +#include "ping/ft_ping_flags.h" +#include "internal/ping/scheduler.h" + +void +ping_scheduler_select_tv(const struct ping_config *config, struct timeval *tv) +{ + tv->tv_usec = 0; + tv->tv_sec = (long)config->timeout * !HAS_FLAG(config->flags, FLAG_FLOOD); +}