From 030b6e1a402a4bb7699eb2b52998ee9c55bfa8e9 Mon Sep 17 00:00:00 2001 From: Jianghua Yang Date: Sat, 29 Aug 2015 15:54:23 +0800 Subject: [PATCH] freebsd: obtain true uptime through clock_gettime() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Obtain true uptime through clock_gettime() instead of subtracting 'bootime' from 'now'. PR-URL: https://github.com/libuv/libuv/pull/497 Reviewed-By: Saúl Ibarra Corretgé --- src/unix/freebsd.c | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/src/unix/freebsd.c b/src/unix/freebsd.c index c838beb2..c69608b1 100644 --- a/src/unix/freebsd.c +++ b/src/unix/freebsd.c @@ -240,17 +240,13 @@ error: int uv_uptime(double* uptime) { - time_t now; - struct timeval info; - size_t size = sizeof(info); - static int which[] = {CTL_KERN, KERN_BOOTTIME}; - - if (sysctl(which, 2, &info, &size, NULL, 0)) + int r; + struct timespec sp; + r = clock_gettime(CLOCK_MONOTONIC, &sp); + if (r) return -errno; - now = time(NULL); - - *uptime = (double)(now - info.tv_sec); + *uptime = sp.tv_sec; return 0; }