From 59054bd46672d0de1777be3566da244f611774d0 Mon Sep 17 00:00:00 2001 From: Koute Date: Mon, 17 Apr 2023 15:44:08 +0900 Subject: [PATCH] Use `MaybeUninit` when calling `getrusage` (musl compatibility) (#7086) --- .../node/core/pvf/src/prepare/memory_stats.rs | 30 ++++++------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/polkadot/node/core/pvf/src/prepare/memory_stats.rs b/polkadot/node/core/pvf/src/prepare/memory_stats.rs index 069ef46cab..3513a68c79 100644 --- a/polkadot/node/core/pvf/src/prepare/memory_stats.rs +++ b/polkadot/node/core/pvf/src/prepare/memory_stats.rs @@ -197,33 +197,21 @@ pub mod memory_tracker { #[cfg(target_os = "linux")] pub mod max_rss_stat { use crate::LOG_TARGET; - use libc::{getrusage, rusage, timeval, RUSAGE_THREAD}; + use core::mem::MaybeUninit; + use libc::{getrusage, rusage, RUSAGE_THREAD}; use std::io; /// Get the rusage stats for the current thread. fn getrusage_thread() -> io::Result { - let mut result = rusage { - ru_utime: timeval { tv_sec: 0, tv_usec: 0 }, - ru_stime: timeval { tv_sec: 0, tv_usec: 0 }, - ru_maxrss: 0, - ru_ixrss: 0, - ru_idrss: 0, - ru_isrss: 0, - ru_minflt: 0, - ru_majflt: 0, - ru_nswap: 0, - ru_inblock: 0, - ru_oublock: 0, - ru_msgsnd: 0, - ru_msgrcv: 0, - ru_nsignals: 0, - ru_nvcsw: 0, - ru_nivcsw: 0, - }; - if unsafe { getrusage(RUSAGE_THREAD, &mut result) } == -1 { + let mut result: MaybeUninit = MaybeUninit::zeroed(); + + // SAFETY: `result` is a valid pointer, so calling this is safe. + if unsafe { getrusage(RUSAGE_THREAD, result.as_mut_ptr()) } == -1 { return Err(io::Error::last_os_error()) } - Ok(result) + + // SAFETY: `result` was successfully initialized by `getrusage`. + unsafe { Ok(result.assume_init()) } } /// Gets the `ru_maxrss` for the current thread.