aboutsummaryrefslogtreecommitdiff
path: root/client/acronc/handler_signal.c
diff options
context:
space:
mode:
authorTrumeet <yuuta@yuuta.moe>2022-07-26 17:36:20 -0700
committerTrumeet <yuuta@yuuta.moe>2022-07-26 17:36:20 -0700
commit7099a86ca74fa637f26af38674f80fb8efd5f6fa (patch)
tree33315c65e82170476cf3c80d976dfa4d16a304a3 /client/acronc/handler_signal.c
parent8b07bf593e54dd876e30d0cb1c7c7226d0d1b1e2 (diff)
downloadacron-7099a86ca74fa637f26af38674f80fb8efd5f6fa.tar
acron-7099a86ca74fa637f26af38674f80fb8efd5f6fa.tar.gz
acron-7099a86ca74fa637f26af38674f80fb8efd5f6fa.tar.bz2
acron-7099a86ca74fa637f26af38674f80fb8efd5f6fa.zip
refactor(libacron/acronc/helloworld): move to separate directories
The corresponding CMakeLists.txt files are still rough.
Diffstat (limited to 'client/acronc/handler_signal.c')
-rw-r--r--client/acronc/handler_signal.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/client/acronc/handler_signal.c b/client/acronc/handler_signal.c
new file mode 100644
index 0000000..1d0ba7e
--- /dev/null
+++ b/client/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;
+}