/* * Created by yuuta on 7/24/22. */ #include "handler.h" #include "log.h" static uv_signal_t sigint; static uv_signal_t sigterm; static void on_sigint(uv_signal_t *handle, int signum) { LOGDV("on_int(handle = %p): %d", handle, signum); void (*on_int)(void) = handle->data; on_int(); } static void on_term(uv_signal_t *handle, int signum) { LOGDV("on_term(handle = %p): %d", handle, signum); void (*on_quit)(void) = handle->data; uv_signal_stop(&sigint); uv_signal_stop(&sigterm); on_quit(); } int h_signal(void (*on_int)(void), void (*on_quit)(void)) { int r; if ((r = uv_signal_init(loop, &sigint))) return r; sigint.data = on_int; if ((r = uv_signal_start(&sigint, on_sigint, SIGINT))) return r; if ((r = uv_signal_init(loop, &sigterm))) return r; sigterm.data = on_quit; if ((r = uv_signal_start(&sigterm, on_term, SIGTERM))) return r; return 0; }