]> git.meshlink.io Git - meshlink/blobdiff - src/event.c
Fix crash when calling meshlink_close().
[meshlink] / src / event.c
index 065f1b5eaf5a52710f8c9412ddccd03b656e8f90..aa451801ea64742b5494785a1f378cee989a73e6 100644 (file)
@@ -26,9 +26,6 @@
 #include "utils.h"
 #include "xalloc.h"
 
-event_loop_t *loop;
-struct timeval now;
-
 static int io_compare(const io_t *a, const io_t *b) {
        return a->fd - b->fd;
 }
@@ -139,6 +136,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;
@@ -171,7 +176,6 @@ bool event_loop_run(event_loop_t *loop) {
 
        while(loop->running) {
                gettimeofday(&loop->now, NULL);
-               now = loop->now;
                struct timeval diff, *tv = NULL;
 
                while(loop->timeouts.head) {
@@ -237,13 +241,14 @@ void event_loop_init(event_loop_t *loop) {
        loop->signals.compare = (splay_compare_t)signal_compare;
        loop->pipefd[0] = -1;
        loop->pipefd[1] = -1;
+       gettimeofday(&loop->now, NULL);
 }
 
 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);
 }