diff --git a/CMakeLists.txt b/CMakeLists.txt index a44e953c..cb79bfa3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -192,8 +192,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android") src/unix/pthread-fixes.c src/unix/random-getentropy.c src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/sysinfo-loadavg.c) + src/unix/random-sysctl-linux.c) endif() if(APPLE OR CMAKE_SYSTEM_NAME MATCHES "Android|Linux|OS390") @@ -237,8 +236,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux") src/unix/linux-syscalls.c src/unix/procfs-exepath.c src/unix/random-getrandom.c - src/unix/random-sysctl-linux.c - src/unix/sysinfo-loadavg.c) + src/unix/random-sysctl-linux.c) endif() if(CMAKE_SYSTEM_NAME STREQUAL "NetBSD") diff --git a/Makefile.am b/Makefile.am index d9d2f3d0..c3391c2a 100644 --- a/Makefile.am +++ b/Makefile.am @@ -386,8 +386,7 @@ libuv_la_SOURCES += src/unix/android-ifaddrs.c \ src/unix/procfs-exepath.c \ src/unix/pthread-fixes.c \ src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/sysinfo-loadavg.c + src/unix/random-sysctl-linux.c endif if CYGWIN @@ -468,8 +467,7 @@ libuv_la_SOURCES += src/unix/linux-core.c \ src/unix/procfs-exepath.c \ src/unix/proctitle.c \ src/unix/random-getrandom.c \ - src/unix/random-sysctl-linux.c \ - src/unix/sysinfo-loadavg.c + src/unix/random-sysctl-linux.c test_run_tests_LDFLAGS += -lutil endif diff --git a/src/unix/linux-core.c b/src/unix/linux-core.c index 5219df48..e792d08b 100644 --- a/src/unix/linux-core.c +++ b/src/unix/linux-core.c @@ -1084,3 +1084,20 @@ uint64_t uv_get_constrained_memory(void) { */ return uv__read_cgroups_uint64("memory", "memory.limit_in_bytes"); } + + +void uv_loadavg(double avg[3]) { + struct sysinfo info; + char buf[128]; /* Large enough to hold all of /proc/loadavg. */ + + if (0 == uv__slurp("/proc/loadavg", buf, sizeof(buf))) + if (3 == sscanf(buf, "%lf %lf %lf", &avg[0], &avg[1], &avg[2])) + return; + + if (sysinfo(&info) < 0) + return; + + avg[0] = (double) info.loads[0] / 65536.0; + avg[1] = (double) info.loads[1] / 65536.0; + avg[2] = (double) info.loads[2] / 65536.0; +}