io_set(loop, io, flags);
- assert(splay_insert_node(&loop->ios, &io->node));
+ splay_node_t *node = splay_insert_node(&loop->ios, &io->node);
+ assert(node);
+ (void)node;
}
void io_set(event_loop_t *loop, io_t *io, int flags) {
return;
}
- signal_t *sig = splay_search(&loop->signals, &((signal_t) {
+ signal_t *sig = splay_search(&loop->signals, &(signal_t) {
.signum = signum
- }));
+ });
if(sig) {
+ sig->set = false;
sig->cb(loop, sig->data);
}
}
static void pipe_init(event_loop_t *loop) {
- assert(pipe(loop->pipefd) == 0);
- io_add(loop, &loop->signalio, signalio_handler, NULL, loop->pipefd[0], IO_READ);
+ int result = pipe(loop->pipefd);
+ assert(result == 0);
+
+ if(result == 0) {
+ io_add(loop, &loop->signalio, signalio_handler, NULL, loop->pipefd[0], IO_READ);
+ }
}
static void pipe_exit(event_loop_t *loop) {
}
void signal_trigger(event_loop_t *loop, signal_t *sig) {
+ if(sig->set) {
+ return;
+ }
+
uint8_t signum = sig->signum;
+ sig->set = true;
write(loop->pipefd[1], &signum, 1);
return;
}
sig->cb = cb;
sig->data = data;
sig->signum = signum;
+ sig->set = false;
sig->node.data = sig;
if(loop->pipefd[0] == -1) {