File tree 1 file changed +8
-7
lines changed
1 file changed +8
-7
lines changed Original file line number Diff line number Diff line change 6
6
use crate :: sys:: utsname:: uname;
7
7
use crate :: Result ;
8
8
use std:: os:: unix:: ffi:: OsStrExt ;
9
+ use std:: sync:: atomic:: { AtomicUsize , Ordering } ;
9
10
10
11
// Features:
11
12
// * atomic cloexec on socket: 2.6.27
@@ -72,15 +73,15 @@ mod os {
72
73
}
73
74
74
75
fn kernel_version ( ) -> Result < usize > {
75
- static mut KERNEL_VERS : usize = 0 ;
76
+ static KERNEL_VERS : AtomicUsize = AtomicUsize :: new ( 0 ) ;
77
+ let mut kernel_vers = KERNEL_VERS . load ( Ordering :: Relaxed ) ;
76
78
77
- unsafe {
78
- if KERNEL_VERS == 0 {
79
- KERNEL_VERS = parse_kernel_version ( ) ?;
80
- }
81
-
82
- Ok ( KERNEL_VERS )
79
+ if kernel_vers == 0 {
80
+ kernel_vers = parse_kernel_version ( ) ?;
81
+ KERNEL_VERS . store ( kernel_vers, Ordering :: Relaxed ) ;
83
82
}
83
+
84
+ Ok ( kernel_vers)
84
85
}
85
86
86
87
/// Check if the OS supports atomic close-on-exec for sockets
You can’t perform that action at this time.
0 commit comments