#include "compiler.h" #include "internal/ping/scheduler.h" /* Forward declarations */ static inline void sigint_handler(int sig); static inline void sigalrm_handler(int sig); static int install_signal(int signum, void (*handler)(int)); static struct ping_state *g_state = NULL; /* -------------------- */ int ping_scheduler_init(struct ping_state *state) { g_state = state; return (install_signal(SIGALRM, sigalrm_handler) != 0 || install_signal(SIGINT, sigint_handler) != 0) ? -1 : 0; } static int install_signal(int signum, void (*handler)(int)) { struct sigaction sa; sa.sa_handler = handler; sigemptyset(&sa.sa_mask); sa.sa_flags = 0; return sigaction(signum, &sa, NULL); } static inline void sigalrm_handler(__unused int sig) { if (NULL != g_state) g_state->send_flag = 1; } static inline void sigint_handler(__unused int sig) { if (NULL != g_state) g_state->stop_flag = 1; }