X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fevent.c;h=d1a0e2568ff1e9a928b89d510b996482f1ae55cb;hb=8bb44d97e49251dbf4c8d6b66956b91c7d2144cf;hp=d23f43bb03c9df683a4ac9a967346f1b7d9aeee5;hpb=d120093edac59d1e634d970ee486f4a2a205d2fa;p=meshlink diff --git a/src/event.c b/src/event.c index d23f43bb..d1a0e256 100644 --- a/src/event.c +++ b/src/event.c @@ -88,6 +88,9 @@ void io_del(event_loop_t *loop, io_t *io) { } void timeout_add(event_loop_t *loop, timeout_t *timeout, timeout_cb_t cb, void *data, struct timeval *tv) { + if(!timeout->cb) + timeout->tv = (struct timeval){0, 0}; + timeout->cb = cb; timeout->data = data; timeout->node.data = timeout; @@ -136,6 +139,14 @@ static void pipe_init(event_loop_t *loop) { io_add(loop, &loop->signalio, signalio_handler, NULL, loop->pipefd[0], IO_READ); } +void signal_trigger(event_loop_t *loop, signal_t *sig) { + + uint8_t signum = sig->signum; + write(loop->pipefd[1], &signum, 1); + return; + +} + void signal_add(event_loop_t *loop, signal_t *sig, signal_cb_t cb, void *data, uint8_t signum) { if(sig->cb) return; @@ -238,9 +249,9 @@ void event_loop_init(event_loop_t *loop) { void event_loop_exit(event_loop_t *loop) { for splay_each(io_t, io, &loop->ios) - splay_free_node(&loop->ios, node); + splay_unlink_node(&loop->ios, node); for splay_each(timeout_t, timeout, &loop->timeouts) - splay_free_node(&loop->timeouts, node); + splay_unlink_node(&loop->timeouts, node); for splay_each(signal_t, signal, &loop->signals) - splay_free_node(&loop->signals, node); + splay_unlink_node(&loop->signals, node); }