|
8 | 8 | #include "SignalHandler.h" |
9 | 9 | #include "globals.h" |
10 | 10 |
|
11 | | -void SignalHandler::signalHandler(int sig, siginfo_t *siginfo, void *context){ |
12 | | - std::cout << "Signal recieved: SignalHandler" << std::endl; |
| 11 | +bool isSigintRecieved; |
| 12 | +bool isSigusr1Recieved; |
| 13 | + |
| 14 | +void SignalHandler::sigintHandler(int sig, siginfo_t *siginfo, void *context){ |
| 15 | + std::cout << "SignalHandler: Signal recieved - SIGINT" << std::endl; |
13 | 16 | isSigintRecieved = true; |
14 | 17 | } |
15 | 18 |
|
| 19 | +void SignalHandler::sigusr1Handler(int sig, siginfo_t *siginfo, void *context){ |
| 20 | + std::cout << "SignalHandler: Signal recieved - SIGUSR1, Config will be reloaded on next use." << std::endl; |
| 21 | + isSigusr1Recieved = true; |
| 22 | +} |
| 23 | + |
16 | 24 | SignalHandler::~SignalHandler() { |
17 | 25 |
|
18 | 26 | } |
19 | 27 |
|
20 | 28 | SignalHandler::SignalHandler() { |
| 29 | + isSigintRecieved = false; |
| 30 | + isSigusr1Recieved = false; |
| 31 | + |
| 32 | + struct sigaction sigintStruct; |
| 33 | + memset (&sigintStruct, '\0', sizeof(sigintStruct)); |
| 34 | + /* Use the sa_sigaction field because the handles has two additional parameters */ |
| 35 | + sigintStruct.sa_sigaction = &sigintHandler; |
| 36 | + /* The SA_SIGINFO flag tells sigaction() to use the sa_sigaction field, not sa_handler. */ |
| 37 | + sigintStruct.sa_flags = SA_SIGINFO; |
21 | 38 |
|
22 | | - struct sigaction act; |
23 | | - memset (&act, '\0', sizeof(act)); |
| 39 | + if (sigaction(SIGINT, &sigintStruct, NULL) < 0) { |
| 40 | + std::cout <<"Signal error" <<std::endl; |
| 41 | + } |
| 42 | + |
| 43 | + struct sigaction sigusr1Struct; |
| 44 | + memset (&sigusr1Struct, '\0', sizeof(sigusr1Struct)); |
24 | 45 | /* Use the sa_sigaction field because the handles has two additional parameters */ |
25 | | - act.sa_sigaction = &signalHandler; |
| 46 | + sigusr1Struct.sa_sigaction = &sigusr1Handler; |
26 | 47 | /* The SA_SIGINFO flag tells sigaction() to use the sa_sigaction field, not sa_handler. */ |
27 | | - act.sa_flags = SA_SIGINFO; |
| 48 | + sigusr1Struct.sa_flags = SA_SIGINFO | SA_RESTART; |
28 | 49 |
|
29 | | - if (sigaction(SIGINT, &act, NULL) < 0) { |
| 50 | + if (sigaction(SIGUSR1, &sigusr1Struct, NULL) < 0) { |
30 | 51 | std::cout <<"Signal error" <<std::endl; |
31 | 52 | } |
| 53 | + |
32 | 54 | } |
0 commit comments