We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
1 parent 20d90b1 commit e5e640cCopy full SHA for e5e640c
library/std/src/sys/unix/thread.rs
@@ -326,6 +326,25 @@ pub fn available_parallelism() -> io::Result<NonZeroUsize> {
326
} else if #[cfg(any(target_os = "freebsd", target_os = "dragonfly", target_os = "netbsd"))] {
327
use crate::ptr;
328
329
+ #[cfg(target_os = "freebsd")]
330
+ {
331
+ let mut set: libc::cpuset_t = unsafe { mem::zeroed() };
332
+ unsafe {
333
+ if libc::cpuset_getaffinity(
334
+ libc::CPU_LEVEL_WHICH,
335
+ libc::CPU_WHICH_PID,
336
+ -1,
337
+ mem::size_of::<libc::cpuset_t>(),
338
+ &mut set,
339
+ ) == 0 {
340
+ let count = libc::CPU_COUNT(&set) as usize;
341
+ if count > 0 {
342
+ return Ok(NonZeroUsize::new_unchecked(count));
343
+ }
344
345
346
347
+
348
let mut cpus: libc::c_uint = 0;
349
let mut cpus_size = crate::mem::size_of_val(&cpus);
350
0 commit comments