diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:21 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 12:18:21 +0000 |
commit | 4e8199b572f2035b7749cba276ece3a26630d23e (patch) | |
tree | f09feeed6a0fe39d027b1908aa63ea6b35e4b631 /vendor/sysinfo/src/freebsd | |
parent | Adding upstream version 1.66.0+dfsg1. (diff) | |
download | rustc-4e8199b572f2035b7749cba276ece3a26630d23e.tar.xz rustc-4e8199b572f2035b7749cba276ece3a26630d23e.zip |
Adding upstream version 1.67.1+dfsg1.upstream/1.67.1+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/sysinfo/src/freebsd')
-rw-r--r-- | vendor/sysinfo/src/freebsd/component.rs | 4 | ||||
-rw-r--r-- | vendor/sysinfo/src/freebsd/process.rs | 57 | ||||
-rw-r--r-- | vendor/sysinfo/src/freebsd/system.rs | 53 | ||||
-rw-r--r-- | vendor/sysinfo/src/freebsd/utils.rs | 6 |
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; |