fix: propagate setitimer and sigaction failures

This commit is contained in:
lohhiiccc 2026-03-23 23:04:10 +01:00
parent de8d7e749b
commit d27ed4a839
4 changed files with 13 additions and 13 deletions

View file

@ -5,8 +5,8 @@
#include "internal/ping/ping_state.h"
void ping_scheduler_init(struct ping_state *state);
void ping_scheduler_arm(const struct ping_config *config);
int ping_scheduler_init(struct ping_state *state);
int ping_scheduler_arm(const struct ping_config *config);
void ping_scheduler_select_tv(const struct ping_config *config,
struct timeval *tv);

View file

@ -61,7 +61,8 @@ ping_one(const struct ping_config *config, struct destinations *dest,
ping_init_state(&state, &stats, &tracker, config, dest->ip, handle);
payload_len = config->packet_size;
ping_scheduler_init(&state);
if (0 != ping_scheduler_init(&state))
return 1;
ping_output_start(config, dest, payload_len);
do_send(&state, payload_len);
ping_loop(&state, payload_len);

View file

@ -1,19 +1,19 @@
#include "ping/ft_ping_flags.h"
#include "internal/ping/scheduler.h"
void
int
ping_scheduler_arm(const struct ping_config *config)
{
struct itimerval itv;
double interval;
if (HAS_FLAG(config->flags, FLAG_FLOOD))
return;
return 0;
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);
return setitimer(ITIMER_REAL, &itv, NULL);
}

View file

@ -4,20 +4,20 @@
/* Forward declarations */
static void inline sigint_handler(int sig);
static void inline sigalrm_handler(int sig);
static void install_signal(int signum, void (*handler)(int));
static int install_signal(int signum, void (*handler)(int));
static struct ping_state *g_state = NULL;
/* -------------------- */
void
int
ping_scheduler_init(struct ping_state *state)
{
g_state = state;
install_signal(SIGALRM, sigalrm_handler);
install_signal(SIGINT, sigint_handler);
return (install_signal(SIGALRM, sigalrm_handler) != 0 ||
install_signal(SIGINT, sigint_handler) != 0) ? -1 : 0;
}
static void
static int
install_signal(int signum, void (*handler)(int))
{
struct sigaction sa;
@ -25,7 +25,7 @@ install_signal(int signum, void (*handler)(int))
sa.sa_handler = handler;
sigemptyset(&sa.sa_mask);
sa.sa_flags = 0;
sigaction(signum, &sa, NULL);
return sigaction(signum, &sa, NULL);
}
static void inline
@ -41,4 +41,3 @@ sigint_handler(__unused int sig)
if (NULL != g_state)
g_state->stop_flag = 1;
}