uloop: fix tv_diff() calculation
[project/libubox.git] / uloop.c
diff --git a/uloop.c b/uloop.c
index bd09260..a28bce8 100644 (file)
--- a/uloop.c
+++ b/uloop.c
@@ -304,10 +304,9 @@ out:
 
 static int tv_diff(struct timeval *t1, struct timeval *t2)
 {
-       if (t1->tv_sec != t2->tv_sec)
-               return (t1->tv_sec - t2->tv_sec) * 1000;
-       else
-               return (t1->tv_usec - t2->tv_usec) / 1000;
+       return
+               (t1->tv_sec - t2->tv_sec) * 1000 +
+               (t1->tv_usec - t2->tv_usec) / 1000;
 }
 
 int uloop_timeout_add(struct uloop_timeout *timeout)
@@ -345,7 +344,7 @@ int uloop_timeout_set(struct uloop_timeout *timeout, int msecs)
 
        if (time->tv_usec > 1000000) {
                time->tv_sec++;
-               time->tv_usec %= 100000;
+               time->tv_usec %= 1000000;
        }
 
        return uloop_timeout_add(timeout);