From 3591ba8578b5eff96c13afc6fdfcf95a96083761 Mon Sep 17 00:00:00 2001 From: Yoshiya Hinosawa Date: Thu, 30 Nov 2023 22:06:01 +0900 Subject: fix(ext/node): fix os.freemem (#21347) --- runtime/ops/os/README.md | 2 +- runtime/ops/os/sys_info.rs | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) (limited to 'runtime/ops') diff --git a/runtime/ops/os/README.md b/runtime/ops/os/README.md index 837bb7b3c..ae1a5958e 100644 --- a/runtime/ops/os/README.md +++ b/runtime/ops/os/README.md @@ -27,6 +27,6 @@ | Target family | Syscall | Description | | ------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -| Linux | sysinfo | - | +| Linux | sysinfo and `/proc/meminfo` | - | | Windows | `sysinfoapi::GlobalMemoryStatusEx` | - | | macOS |
 sysctl([CTL_HW, HW_MEMSIZE]); 
sysctl([CTL_VM, VM_SWAPUSAGE]);
host_statistics64(mach_host_self(), HOST_VM_INFO64)
| - | diff --git a/runtime/ops/os/sys_info.rs b/runtime/ops/os/sys_info.rs index d8175f31b..b3d2cd743 100644 --- a/runtime/ops/os/sys_info.rs +++ b/runtime/ops/os/sys_info.rs @@ -211,8 +211,20 @@ pub fn mem_info() -> Option { mem_info.swap_free = info.freeswap * mem_unit; mem_info.total = info.totalram * mem_unit; mem_info.free = info.freeram * mem_unit; + mem_info.available = mem_info.free; mem_info.buffers = info.bufferram * mem_unit; } + + // Gets the available memory from /proc/meminfo in linux for compatibility + #[allow(clippy::disallowed_methods)] + if let Ok(meminfo) = std::fs::read_to_string("/proc/meminfo") { + let line = meminfo.lines().find(|l| l.starts_with("MemAvailable:")); + if let Some(line) = line { + let mem = line.split_whitespace().nth(1); + let mem = mem.and_then(|v| v.parse::().ok()); + mem_info.available = mem.unwrap_or(0); + } + } } #[cfg(target_vendor = "apple")] { -- cgit v1.2.3