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; }