- if(!pipe(loop->pipefd))
- io_add(loop, &loop->signalio, signalio_handler, NULL, loop->pipefd[0], IO_READ);
+ assert(pipe(loop->pipefd) == 0);
+ io_add(loop, &loop->signalio, signalio_handler, NULL, loop->pipefd[0], IO_READ);
+}
+
+static void pipe_exit(event_loop_t *loop) {
+ io_del(loop, &loop->signalio);
+
+ close(loop->pipefd[0]);
+ close(loop->pipefd[1]);
+
+ loop->pipefd[0] = -1;
+ loop->pipefd[1] = -1;
+}
+
+void signal_trigger(event_loop_t *loop, signal_t *sig) {
+ uint8_t signum = sig->signum;
+ write(loop->pipefd[1], &signum, 1);
+ return;