aboutsummaryrefslogtreecommitdiff
path: root/client/libacron/apps/acronc/handler_signal.c
diff options
context:
space:
mode:
Diffstat (limited to 'client/libacron/apps/acronc/handler_signal.c')
-rw-r--r--client/libacron/apps/acronc/handler_signal.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/client/libacron/apps/acronc/handler_signal.c b/client/libacron/apps/acronc/handler_signal.c
new file mode 100644
index 0000000..1d0ba7e
--- /dev/null
+++ b/client/libacron/apps/acronc/handler_signal.c
@@ -0,0 +1,40 @@
+/*
+ * Created by yuuta on 7/24/22.
+ */
+
+#include "handler.h"
+#include "log.h"
+
+static uv_signal_t sigint;
+static struct uv_obj obj_sigint = {
+ .obj = &sigint,
+ .running = false
+};
+static uv_signal_t sigterm;
+static struct uv_obj obj_sigterm = {
+ .obj = &sigterm,
+ .running = false
+};
+
+static void on_signal(uv_signal_t *handle, int signum) {
+ LOGDV("on_signal(handle = %p): %d",
+ handle,
+ signum);
+ uv_signal_stop(&sigint);
+ obj_sigint.running = false;
+ uv_signal_stop(&sigterm);
+ obj_sigterm.running = false;
+ on_exit(EXIT_SIGNAL);
+}
+
+int h_signal(void) {
+ int r;
+ if ((r = uv_signal_init(loop, &sigint))) return r;
+ if ((r = uv_signal_start(&sigint, on_signal, SIGINT))) return r;
+
+ obj_sigint.running = true;
+ if ((r = uv_signal_init(loop, &sigterm))) return r;
+ if ((r = uv_signal_start(&sigterm, on_signal, SIGTERM))) return r;
+ obj_sigterm.running = true;
+ return 0;
+}