summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorZachary S <zasample18+github@gmail.com>2023-04-29 14:54:23 -0500
committerZachary S <zasample18+github@gmail.com>2023-04-29 18:35:28 -0500
commit2f60820c3d11e773826705b7204216aebbad5a6c (patch)
tree52242d54d27cf526d40b058ede7dc77ac44e263b /src
parent71a997a6b5e58a5108f9c0cd27dc0ca4f9b1ed52 (diff)
downloadnix-2f60820c3d11e773826705b7204216aebbad5a6c.zip
Remove 'static mut' usage in features::os::kernel_version.
(re-commit for CI retry after rustix 0.37.18 release)
Diffstat (limited to 'src')
-rw-r--r--src/features.rs15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/features.rs b/src/features.rs
index 39d17604..2f07a8fc 100644
--- a/src/features.rs
+++ b/src/features.rs
@@ -6,6 +6,7 @@ mod os {
use crate::sys::utsname::uname;
use crate::Result;
use std::os::unix::ffi::OsStrExt;
+ use std::sync::atomic::{AtomicUsize, Ordering};
// Features:
// * atomic cloexec on socket: 2.6.27
@@ -72,15 +73,15 @@ mod os {
}
fn kernel_version() -> Result<usize> {
- static mut KERNEL_VERS: usize = 0;
+ static KERNEL_VERS: AtomicUsize = AtomicUsize::new(0);
+ let mut kernel_vers = KERNEL_VERS.load(Ordering::Relaxed);
- unsafe {
- if KERNEL_VERS == 0 {
- KERNEL_VERS = parse_kernel_version()?;
- }
-
- Ok(KERNEL_VERS)
+ if kernel_vers == 0 {
+ kernel_vers = parse_kernel_version()?;
+ KERNEL_VERS.store(kernel_vers, Ordering::Relaxed);
}
+
+ Ok(kernel_vers)
}
/// Check if the OS supports atomic close-on-exec for sockets