Fix check for expired events.
[tinc] / src / event.c
index 6827dc0..fdbf11d 100644 (file)
@@ -36,7 +36,7 @@ static int io_compare(const io_t *a, const io_t *b) {
 static int timeout_compare(const timeout_t *a, const timeout_t *b) {
        struct timeval diff;
        timersub(&a->tv, &b->tv, &diff);
-       return diff.tv_sec ?: diff.tv_usec;
+       return diff.tv_sec ?: diff.tv_usec ?: a < b ? -1 : a > b ? 1 : 0;
 }
 
 static int signal_compare(const signal_t *a, const signal_t *b) {
@@ -182,7 +182,7 @@ bool event_loop(void) {
                        timeout_t *timeout = timeout_tree.head->data;
                        timersub(&timeout->tv, &now, &diff);
 
-                       if(diff.tv_sec <= 0) {
+                       if(diff.tv_sec < 0) {
                                timeout->cb(timeout->data);
                                if(timercmp(&timeout->tv, &now, <))
                                        timeout_del(timeout);