@@ -498,8 +498,8 @@ pub struct Opts {
498
498
499
499
/// Set number of threads to use for searching & executing (default: number
500
500
/// of available CPU cores)
501
- #[ arg( long, short = 'j' , value_name = "num" , hide_short_help = true , value_parser = clap :: value_parser! ( u32 ) . range ( 1 .. ) ) ]
502
- pub threads : Option < u32 > ,
501
+ #[ arg( long, short = 'j' , value_name = "num" , hide_short_help = true , value_parser = str :: parse :: < NonZeroUsize > ) ]
502
+ pub threads : Option < NonZeroUsize > ,
503
503
504
504
/// Milliseconds to buffer before streaming search results to console
505
505
///
@@ -688,15 +688,8 @@ impl Opts {
688
688
self . min_depth . or ( self . exact_depth )
689
689
}
690
690
691
- pub fn threads ( & self ) -> usize {
692
- // This will panic if the number of threads passed in is more than usize::MAX in an environment
693
- // where usize is less than 32 bits (for example 16-bit architectures). It's pretty
694
- // unlikely fd will be running in such an environment, and even more unlikely someone would
695
- // be trying to use that many threads on such an environment, so I think panicing is an
696
- // appropriate way to handle that.
697
- self . threads . map_or_else ( default_num_threads, |n| {
698
- std:: cmp:: max ( n. try_into ( ) . expect ( "too many threads" ) , 1 )
699
- } )
691
+ pub fn threads ( & self ) -> NonZeroUsize {
692
+ self . threads . unwrap_or_else ( default_num_threads)
700
693
}
701
694
702
695
pub fn max_results ( & self ) -> Option < usize > {
@@ -719,13 +712,14 @@ impl Opts {
719
712
}
720
713
721
714
/// Get the default number of threads to use, if not explicitly specified.
722
- fn default_num_threads ( ) -> usize {
715
+ fn default_num_threads ( ) -> NonZeroUsize {
723
716
// If we can't get the amount of parallelism for some reason, then
724
717
// default to a single thread, because that is safe.
718
+ // Note that the minimum value for a NonZeroUsize is 1.
719
+ // Unfortunately, we can't do `NonZeroUsize::new(1).unwrap()`
720
+ // in a const context.
725
721
const FALLBACK_PARALLELISM : NonZeroUsize = NonZeroUsize :: MIN ;
726
- std:: thread:: available_parallelism ( )
727
- . unwrap_or ( FALLBACK_PARALLELISM )
728
- . get ( )
722
+ std:: thread:: available_parallelism ( ) . unwrap_or ( FALLBACK_PARALLELISM )
729
723
}
730
724
731
725
#[ derive( Copy , Clone , PartialEq , Eq , ValueEnum ) ]
0 commit comments