Skip to content

Commit 1d57b3a

Browse files
committed
Simplify parsing number of threads.
1 parent 325d419 commit 1d57b3a

File tree

2 files changed

+10
-16
lines changed

2 files changed

+10
-16
lines changed

src/cli.rs

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -498,8 +498,8 @@ pub struct Opts {
498498

499499
/// Set number of threads to use for searching & executing (default: number
500500
/// 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>,
503503

504504
/// Milliseconds to buffer before streaming search results to console
505505
///
@@ -688,15 +688,8 @@ impl Opts {
688688
self.min_depth.or(self.exact_depth)
689689
}
690690

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)
700693
}
701694

702695
pub fn max_results(&self) -> Option<usize> {
@@ -719,13 +712,14 @@ impl Opts {
719712
}
720713

721714
/// Get the default number of threads to use, if not explicitly specified.
722-
fn default_num_threads() -> usize {
715+
fn default_num_threads() -> NonZeroUsize {
723716
// If we can't get the amount of parallelism for some reason, then
724717
// 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.
725721
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)
729723
}
730724

731725
#[derive(Copy, Clone, PartialEq, Eq, ValueEnum)]

src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -252,7 +252,7 @@ fn construct_config(mut opts: Opts, pattern_regexps: &[String]) -> Result<Config
252252
max_depth: opts.max_depth(),
253253
min_depth: opts.min_depth(),
254254
prune: opts.prune,
255-
threads: opts.threads(),
255+
threads: opts.threads().get(),
256256
max_buffer_time: opts.max_buffer_time,
257257
ls_colors,
258258
interactive_terminal,

0 commit comments

Comments
 (0)