@@ -350,6 +350,7 @@ pub fn available_parallelism() -> io::Result<NonZero<usize>> {
350350 target_os = "hurd" ,
351351 target_os = "linux" ,
352352 target_os = "aix" ,
353+ target_os = "freebsd" ,
353354 target_vendor = "apple" ,
354355 ) ) ] {
355356 #[ allow( unused_assignments) ]
@@ -359,9 +360,17 @@ pub fn available_parallelism() -> io::Result<NonZero<usize>> {
359360 #[ cfg( any( target_os = "android" , target_os = "linux" ) ) ]
360361 {
361362 quota = cgroups:: quota( ) . max( 1 ) ;
362- let mut set: libc:: cpu_set_t = unsafe { mem:: zeroed( ) } ;
363+ }
364+
365+ #[ cfg( any( target_os = "android" , target_os = "linux" , target_os = "freebsd" ) ) ]
366+ {
367+ #[ cfg( not( target_os = "freebsd" ) ) ]
368+ type cpuset = libc:: cpu_set_t;
369+ #[ cfg( target_os = "freebsd" ) ]
370+ type cpuset = libc:: cpuset_t;
371+ let mut set: cpuset = unsafe { mem:: zeroed( ) } ;
363372 unsafe {
364- if libc:: sched_getaffinity( 0 , mem:: size_of:: <libc :: cpu_set_t >( ) , & mut set) == 0 {
373+ if libc:: sched_getaffinity( 0 , mem:: size_of:: <cpuset >( ) , & mut set) == 0 {
365374 let count = libc:: CPU_COUNT ( & set) as usize ;
366375 let count = count. min( quota) ;
367376
@@ -386,32 +395,12 @@ pub fn available_parallelism() -> io::Result<NonZero<usize>> {
386395 }
387396 }
388397 } else if #[ cfg( any(
389- target_os = "freebsd" ,
390398 target_os = "dragonfly" ,
391399 target_os = "openbsd" ,
392400 target_os = "netbsd" ,
393401 ) ) ] {
394402 use crate :: ptr;
395403
396- #[ cfg( target_os = "freebsd" ) ]
397- {
398- let mut set: libc:: cpuset_t = unsafe { mem:: zeroed( ) } ;
399- unsafe {
400- if libc:: cpuset_getaffinity(
401- libc:: CPU_LEVEL_WHICH ,
402- libc:: CPU_WHICH_PID ,
403- -1 ,
404- mem:: size_of:: <libc:: cpuset_t>( ) ,
405- & mut set,
406- ) == 0 {
407- let count = libc:: CPU_COUNT ( & set) as usize ;
408- if count > 0 {
409- return Ok ( NonZero :: new_unchecked( count) ) ;
410- }
411- }
412- }
413- }
414-
415404 #[ cfg( target_os = "netbsd" ) ]
416405 {
417406 unsafe {
0 commit comments