Skip to content

Commit 159e4e7

Browse files
committed
Use libevent native signal handling
1 parent 21525b9 commit 159e4e7

File tree

1 file changed

+27
-9
lines changed

1 file changed

+27
-9
lines changed

src/testtool.cpp

+27-9
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@
77
#define FMT_HEADER_ONLY
88

99
#include <boost/interprocess/ipc/message_queue.hpp>
10-
#include <event2/event.h>
10+
#include <event2/event-config.h>
11+
#include <event2/util.h>
12+
#include <event2/visibility.h>
1113
#include <fmt/format.h>
1214
#include <fmt/printf.h>
1315
#include <fstream>
@@ -50,8 +52,10 @@ message_queue *pfctl_mq;
5052
pid_t parent_pid;
5153
pid_t worker_pid;
5254

53-
void signal_handler(int signum) {
54-
switch (signum) {
55+
static void signal_handler(evutil_socket_t fd, short event, void *arg) {
56+
int signal = event_get_signal((struct event *)arg);
57+
58+
switch (signal) {
5559
case SIGPIPE:
5660
// This will happen on failed SSL checks.
5761
break;
@@ -391,18 +395,32 @@ int main(int argc, char *argv[]) {
391395
setproctitle("%s", "main process");
392396
#endif
393397

394-
signal(SIGINT, signal_handler);
395-
signal(SIGTERM, signal_handler);
396-
signal(SIGHUP, signal_handler);
397-
signal(SIGPIPE, signal_handler);
398-
signal(SIGUSR1, signal_handler);
399-
400398
if (!init_libssl()) {
401399
log(MessageType::MSG_CRIT, "Unable to initialise OpenSSL, terminating!");
402400
exit(EXIT_FAILURE);
403401
}
404402
init_libevent();
405403

404+
struct event *ev_sigint =
405+
evsignal_new(eventBase, SIGINT, signal_handler, event_self_cbarg());
406+
evsignal_add(ev_sigint, NULL);
407+
408+
struct event *ev_sigterm =
409+
evsignal_new(eventBase, SIGTERM, signal_handler, event_self_cbarg());
410+
evsignal_add(ev_sigterm, NULL);
411+
412+
struct event *ev_sighup =
413+
evsignal_new(eventBase, SIGHUP, signal_handler, event_self_cbarg());
414+
evsignal_add(ev_sighup, NULL);
415+
416+
struct event *ev_sigpipe =
417+
evsignal_new(eventBase, SIGPIPE, signal_handler, event_self_cbarg());
418+
evsignal_add(ev_sigpipe, NULL);
419+
420+
struct event *ev_sigusr1 =
421+
evsignal_new(eventBase, SIGUSR1, signal_handler, event_self_cbarg());
422+
evsignal_add(ev_sigusr1, NULL);
423+
406424
if (!Healthcheck_ping::initialize()) {
407425
log(MessageType::MSG_CRIT,
408426
"Unable to initialize Healthcheck_ping, terminating!");

0 commit comments

Comments
 (0)