static void *signal_thread_func(void *data) { while (1) { siginfo_t siginfo; int ret; ret = sigwaitinfo(&signal_set, &siginfo); /* TODO: Print an error? */ if (ret < 0) continue; signal_cb(&siginfo, signal_cbdata); /* Die on SIGTERM. */ if (siginfo.si_signo == SIGTERM) break; } return NULL; }
static void signal_cb_uv(uv_signal_t *watcher, int signum) { signal_cb(signum); }
static void signal_cb_ev(struct ev_loop *loop, struct ev_signal *watcher, int revents) { signal_cb(watcher->signum); }
static void signal_cb_event(int fd, short event, void *arg) { signal_cb((int)(lws_intptr_t)arg); }