]> git.meshlink.io Git - meshlink/blobdiff - src/event.c
Merge remote-tracking branch 'origin/everbase' into discovery
[meshlink] / src / event.c
index d23f43bb03c9df683a4ac9a967346f1b7d9aeee5..d1a0e2568ff1e9a928b89d510b996482f1ae55cb 100644 (file)
@@ -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);
 }