summaryrefslogtreecommitdiffstats
path: root/vendor/sysinfo/src/freebsd
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/sysinfo/src/freebsd')
-rw-r--r--vendor/sysinfo/src/freebsd/component.rs4
-rw-r--r--vendor/sysinfo/src/freebsd/process.rs57
-rw-r--r--vendor/sysinfo/src/freebsd/system.rs53
-rw-r--r--vendor/sysinfo/src/freebsd/utils.rs6
4 files changed, 72 insertions, 48 deletions
diff --git a/vendor/sysinfo/src/freebsd/component.rs b/vendor/sysinfo/src/freebsd/component.rs
index 6529be73c..c4e84fe63 100644
--- a/vendor/sysinfo/src/freebsd/component.rs
+++ b/vendor/sysinfo/src/freebsd/component.rs
@@ -55,9 +55,7 @@ pub unsafe fn get_components(nb_cpus: usize) -> Vec<Component> {
let mut components = Vec::with_capacity(nb_cpus);
for core in 0..nb_cpus {
- let id = format!("dev.cpu.{}.temperature\0", core)
- .as_bytes()
- .to_vec();
+ let id = format!("dev.cpu.{core}.temperature\0").as_bytes().to_vec();
if let Some(temperature) = refresh_component(&id) {
components.push(Component {
id,
diff --git a/vendor/sysinfo/src/freebsd/process.rs b/vendor/sysinfo/src/freebsd/process.rs
index b3302edbe..b0dda0f76 100644
--- a/vendor/sysinfo/src/freebsd/process.rs
+++ b/vendor/sysinfo/src/freebsd/process.rs
@@ -5,6 +5,8 @@ use crate::{DiskUsage, Gid, Pid, ProcessExt, ProcessRefreshKind, ProcessStatus,
use std::fmt;
use std::path::{Path, PathBuf};
+use libc::kill;
+
use super::utils::{get_sys_value_str, WrapMap};
#[doc(hidden)]
@@ -141,6 +143,20 @@ impl ProcessExt for Process {
fn group_id(&self) -> Option<Gid> {
Some(self.group_id)
}
+
+ fn wait(&self) {
+ let mut status = 0;
+ // attempt waiting
+ unsafe {
+ if libc::waitpid(self.pid.0, &mut status, 0) < 0 {
+ // attempt failed (non-child process) so loop until process ends
+ let duration = std::time::Duration::from_millis(10);
+ while kill(self.pid.0, 0) == 0 {
+ std::thread::sleep(duration);
+ }
+ }
+ }
+ }
}
pub(crate) unsafe fn get_process_data(
@@ -171,28 +187,34 @@ pub(crate) unsafe fn get_process_data(
let status = ProcessStatus::from(kproc.ki_stat);
// from FreeBSD source /src/usr.bin/top/machine.c
- let virtual_memory = (kproc.ki_size / 1_000) as u64;
- let memory = (kproc.ki_rssize as u64).saturating_mul(page_size as _) / 1_000;
+ let virtual_memory = kproc.ki_size as _;
+ let memory = (kproc.ki_rssize as u64).saturating_mul(page_size as _);
// FIXME: This is to get the "real" run time (in micro-seconds).
// let run_time = (kproc.ki_runtime + 5_000) / 10_000;
+ let start_time = kproc.ki_start.tv_sec as u64;
+
if let Some(proc_) = (*wrap.0.get()).get_mut(&Pid(kproc.ki_pid)) {
- proc_.cpu_usage = cpu_usage;
- proc_.parent = parent;
- proc_.status = status;
- proc_.virtual_memory = virtual_memory;
- proc_.memory = memory;
- proc_.run_time = now.saturating_sub(proc_.start_time);
proc_.updated = true;
-
- if refresh_kind.disk_usage() {
- proc_.old_read_bytes = proc_.read_bytes;
- proc_.read_bytes = kproc.ki_rusage.ru_inblock as _;
- proc_.old_written_bytes = proc_.written_bytes;
- proc_.written_bytes = kproc.ki_rusage.ru_oublock as _;
+ // If the `start_time` we just got is different from the one stored, it means it's not the
+ // same process.
+ if proc_.start_time == start_time {
+ proc_.cpu_usage = cpu_usage;
+ proc_.parent = parent;
+ proc_.status = status;
+ proc_.virtual_memory = virtual_memory;
+ proc_.memory = memory;
+ proc_.run_time = now.saturating_sub(proc_.start_time);
+
+ if refresh_kind.disk_usage() {
+ proc_.old_read_bytes = proc_.read_bytes;
+ proc_.read_bytes = kproc.ki_rusage.ru_inblock as _;
+ proc_.old_written_bytes = proc_.written_bytes;
+ proc_.written_bytes = kproc.ki_rusage.ru_oublock as _;
+ }
+
+ return Ok(None);
}
-
- return Ok(None);
}
// This is a new process, we need to get more information!
@@ -222,7 +244,6 @@ pub(crate) unsafe fn get_process_data(
// .map(|s| s.into())
// .unwrap_or_else(PathBuf::new);
- let start_time = kproc.ki_start.tv_sec as u64;
Ok(Some(Process {
pid: Pid(kproc.ki_pid),
parent,
@@ -249,6 +270,6 @@ pub(crate) unsafe fn get_process_data(
old_read_bytes: 0,
written_bytes: kproc.ki_rusage.ru_oublock as _,
old_written_bytes: 0,
- updated: true,
+ updated: false,
}))
}
diff --git a/vendor/sysinfo/src/freebsd/system.rs b/vendor/sysinfo/src/freebsd/system.rs
index 16da2de50..12298bbcf 100644
--- a/vendor/sysinfo/src/freebsd/system.rs
+++ b/vendor/sysinfo/src/freebsd/system.rs
@@ -126,11 +126,8 @@ impl SystemExt for System {
frequency = get_frequency_for_cpu(pos);
}
}
- self.cpus.push(Cpu::new(
- format!("cpu {}", pos),
- vendor_id.clone(),
- frequency,
- ));
+ self.cpus
+ .push(Cpu::new(format!("cpu {pos}"), vendor_id.clone(), frequency));
}
self.global_cpu.vendor_id = vendor_id;
self.got_cpu_frequency = refresh_kind.frequency();
@@ -307,6 +304,13 @@ impl SystemExt for System {
&mut self.disks
}
+ fn sort_disks_by<F>(&mut self, compare: F)
+ where
+ F: FnMut(&Disk, &Disk) -> std::cmp::Ordering,
+ {
+ self.disks.sort_unstable_by(compare);
+ }
+
fn uptime(&self) -> u64 {
unsafe {
let csec = libc::time(::std::ptr::null_mut());
@@ -354,6 +358,10 @@ impl SystemExt for System {
fn os_version(&self) -> Option<String> {
self.system_info.get_os_release()
}
+
+ fn distribution_id(&self) -> String {
+ std::env::consts::OS.to_owned()
+ }
}
impl Default for System {
@@ -377,10 +385,6 @@ impl System {
#[cfg(not(feature = "multithread"))]
use std::iter::Iterator as IterTrait;
- crate::utils::into_iter(&mut self.process_list).for_each(|(_, proc_)| {
- proc_.updated = false;
- });
-
let fscale = self.system_info.fscale;
let page_size = self.system_info.page_size as isize;
let now = super::utils::get_now();
@@ -404,7 +408,8 @@ impl System {
};
// We remove all processes that don't exist anymore.
- self.process_list.retain(|_, v| v.updated);
+ self.process_list
+ .retain(|_, v| std::mem::replace(&mut v.updated, false));
for (kproc, proc_) in procs {
self.add_missing_proc_info(kd, kproc, proc_);
@@ -651,8 +656,8 @@ impl SystemInfo {
)
});
(
- used.saturating_mul(self.page_size as _) / 1_000,
- total.saturating_mul(self.page_size as _) / 1_000,
+ used.saturating_mul(self.page_size as _),
+ total.saturating_mul(self.page_size as _),
)
}
}
@@ -661,14 +666,14 @@ impl SystemInfo {
let mut nb_pages: u64 = 0;
unsafe {
if get_sys_value(&self.virtual_page_count, &mut nb_pages) {
- return nb_pages.saturating_mul(self.page_size as _) / 1_000;
+ return nb_pages.saturating_mul(self.page_size as _);
}
// This is a fallback. It includes all the available memory, not just the one available for
// the users.
let mut total_memory: u64 = 0;
get_sys_value(&self.hw_physical_memory, &mut total_memory);
- total_memory / 1_000
+ total_memory
}
}
@@ -686,10 +691,9 @@ impl SystemInfo {
if let Some(arc_size) = self.zfs.arc_size() {
mem_wire -= arc_size;
}
- let used = mem_active
+ mem_active
.saturating_mul(self.page_size as _)
- .saturating_add(mem_wire);
- used / 1_000
+ .saturating_add(mem_wire)
}
}
@@ -705,11 +709,10 @@ impl SystemInfo {
get_sys_value(&self.virtual_cache_count, &mut cached_mem);
get_sys_value(&self.virtual_free_count, &mut free_mem);
// For whatever reason, buffers_mem is already the right value...
- let free = buffers_mem
- .saturating_add(inactive_mem.saturating_mul(self.page_size as u64))
- .saturating_add(cached_mem.saturating_mul(self.page_size as u64))
- .saturating_add(free_mem.saturating_mul(self.page_size as u64));
- free / 1_000
+ buffers_mem
+ .saturating_add(inactive_mem.saturating_mul(self.page_size as _))
+ .saturating_add(cached_mem.saturating_mul(self.page_size as _))
+ .saturating_add(free_mem.saturating_mul(self.page_size as _))
}
}
@@ -730,8 +733,10 @@ impl SystemInfo {
if i != libc::CP_IDLE as usize {
cp_diff += new_cp_time[i] - old_cp_time[i];
}
- total_new += new_cp_time[i] as u64;
- total_old += old_cp_time[i] as u64;
+ let mut tmp: u64 = new_cp_time[i] as _;
+ total_new += tmp;
+ tmp = old_cp_time[i] as _;
+ total_old += tmp;
}
let total_diff = total_new - total_old;
diff --git a/vendor/sysinfo/src/freebsd/utils.rs b/vendor/sysinfo/src/freebsd/utils.rs
index 00de3e9d9..5745a37f6 100644
--- a/vendor/sysinfo/src/freebsd/utils.rs
+++ b/vendor/sysinfo/src/freebsd/utils.rs
@@ -169,7 +169,7 @@ pub(crate) fn get_sys_value_str_by_name(name: &[u8]) -> Option<String> {
&& size > 0
{
// now create a buffer with the size and get the real value
- let mut buf: Vec<libc::c_char> = vec![0; size as usize];
+ let mut buf: Vec<libc::c_char> = vec![0; size as _];
if libc::sysctlbyname(
name.as_ptr() as *const c_char,
@@ -210,7 +210,7 @@ pub(crate) fn get_system_info(mib: &[c_int], default: Option<&str>) -> Option<St
default.map(|s| s.to_owned())
} else {
// set the buffer to the correct size
- let mut buf: Vec<libc::c_char> = vec![0; size as usize];
+ let mut buf: Vec<libc::c_char> = vec![0; size as _];
if libc::sysctl(
mib.as_ptr(),
@@ -287,7 +287,7 @@ pub(crate) unsafe fn get_frequency_for_cpu(cpu_nb: c_int) -> u64 {
// The information can be missing if it's running inside a VM.
if !get_sys_value_by_name(
- format!("dev.cpu.{}.freq\0", cpu_nb).as_bytes(),
+ format!("dev.cpu.{cpu_nb}.freq\0").as_bytes(),
&mut frequency,
) {
frequency = 0;