blob: 37aa26b74a3418479c6313098514af92cc6058e1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#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)
{
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_sd;
struct sigaction action_wake;
signal_running = 1;
signal_update = 0;
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 = add_signal(&action_sd, SIGTERM);
if(rc < 0) return rc;
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;
}
|