diff options
| author | Sam Light <sam@lightscale.co.uk> | 2025-09-10 19:37:28 +0100 |
|---|---|---|
| committer | Sam Light <sam@lightscale.co.uk> | 2025-09-10 19:37:28 +0100 |
| commit | 8101b1aa507795224054a752dd603ec3426c40ee (patch) | |
| tree | 79c593f1d2a8c54f380f1d373a79f21cc5fc4a06 /src/signal.c | |
| parent | d9b456d738e5013d48f41f5e6315ef7c22d6acf0 (diff) | |
Created better management of updates + update on SIGUSR1
Diffstat (limited to 'src/signal.c')
| -rw-r--r-- | src/signal.c | 54 |
1 files changed, 46 insertions, 8 deletions
diff --git a/src/signal.c b/src/signal.c index e993ae3..37aa26b 100644 --- a/src/signal.c +++ b/src/signal.c @@ -1,8 +1,10 @@ #include "signal.h" +#include <stdio.h> #include <string.h> sig_atomic_t signal_running; +sig_atomic_t signal_update; static void handle_signal_shutdown(int sig) @@ -10,25 +12,61 @@ handle_signal_shutdown(int sig) signal_running = 0; } +static void +handle_signal_wake(int sig) +{ + signal_update = 1; +} + +static int +add_signal(struct sigaction * action, int sig) +{ + int rc; + + rc = sigemptyset(&action->sa_mask); + if(rc < 0) return rc; + rc = sigaction(sig, action, 0); + if(rc < 0) return rc; + + return rc; +} + +static void +init_action(struct sigaction * action, void(*cb)(int)) +{ + memset(action, 0, sizeof(struct sigaction)); + + action->sa_handler = cb; +} + int signal_setup_actions() { int rc; - struct sigaction action; + struct sigaction action_sd; + struct sigaction action_wake; signal_running = 1; + signal_update = 0; - memset(&action, 0, sizeof(action)); - action.sa_handler = handle_signal_shutdown; - rc = sigemptyset(&action.sa_mask); + init_action(&action_sd, handle_signal_shutdown); + init_action(&action_wake, handle_signal_wake); + + rc = add_signal(&action_sd, SIGINT); if(rc < 0) return rc; - rc = sigaction(SIGINT, &action, 0); + rc = add_signal(&action_sd, SIGTERM); if(rc < 0) return rc; - rc = sigemptyset(&action.sa_mask); - if(rc < 0) return rc; - rc = sigaction(SIGTERM, &action, 0); + rc = add_signal(&action_wake, SIGUSR1); if(rc < 0) return rc; return rc; } + +bool +signal_should_update() +{ + bool r = signal_update; + signal_update = 0; + return r; +} |
