about summary refs log tree commit diff
path: root/evloop
diff options
context:
space:
mode:
Diffstat (limited to 'evloop')
-rw-r--r--evloop/timer.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/evloop/timer.c b/evloop/timer.c
index d115959..13fb5e8 100644
--- a/evloop/timer.c
+++ b/evloop/timer.c
@@ -25,12 +25,15 @@ int
 evtimer_gettime(struct timespec *ts)
 {
     uint64_t nsecs;
+    static double nsmul;
     static mach_timebase_info_data_t nsratio = { 0, 0 };
-    if (nsratio.denom == 0)
+    if (nsratio.denom == 0) {
         mach_timebase_info(&nsratio);
-    nsecs = mach_absolute_time() * nsratio.numer / nsratio.denom;
-    ts->tv_sec = nsecs / 1000000000;
-    ts->tv_nsec = nsecs - ts->tv_sec * 1000000000;
+	nsmul = (double)nsratio.numer / nsratio.denom;
+    }
+    nsecs = mach_absolute_time() * nsmul;
+    ts->tv_sec = nsecs / 1000000000ULL;
+    ts->tv_nsec = nsecs - ts->tv_sec * 1000000000ULL;
     return 0;
 }