mirror of
https://github.com/rust-lang/rust.git
synced 2025-02-19 10:24:16 +00:00
Rollup merge of #110830 - Freaky:freebsd-cpuset, r=thomcc
Add FreeBSD cpuset support to `std:🧵:available_concurrency`
Use libc::cpuset_getaffinity to determine the CPUs available to the current process.
The existing sysconf and sysctl paths are left as fallback.
This commit is contained in:
commit
3d9a1de690
@ -326,6 +326,25 @@ pub fn available_parallelism() -> io::Result<NonZeroUsize> {
|
|||||||
} else if #[cfg(any(target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd"))] {
|
} else if #[cfg(any(target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd"))] {
|
||||||
use crate::ptr;
|
use crate::ptr;
|
||||||
|
|
||||||
|
#[cfg(target_os = "freebsd")]
|
||||||
|
{
|
||||||
|
let mut set: libc::cpuset_t = unsafe { mem::zeroed() };
|
||||||
|
unsafe {
|
||||||
|
if libc::cpuset_getaffinity(
|
||||||
|
libc::CPU_LEVEL_WHICH,
|
||||||
|
libc::CPU_WHICH_PID,
|
||||||
|
-1,
|
||||||
|
mem::size_of::<libc::cpuset_t>(),
|
||||||
|
&mut set,
|
||||||
|
) == 0 {
|
||||||
|
let count = libc::CPU_COUNT(&set) as usize;
|
||||||
|
if count > 0 {
|
||||||
|
return Ok(NonZeroUsize::new_unchecked(count));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let mut cpus: libc::c_uint = 0;
|
let mut cpus: libc::c_uint = 0;
|
||||||
let mut cpus_size = crate::mem::size_of_val(&cpus);
|
let mut cpus_size = crate::mem::size_of_val(&cpus);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user