Fix: Try to stop panics on android.

Catch panics on thread initialization.
This commit is contained in:
andy.boot
2022-08-26 17:08:46 +01:00
parent 0d0206a5a5
commit 137bde1099
+13 -5
View File
@@ -11,6 +11,7 @@ mod utils;
use crate::cli::build_cli; use crate::cli::build_cli;
use std::collections::HashSet; use std::collections::HashSet;
use std::panic;
use std::process; use std::process;
use self::display::draw_it; use self::display::draw_it;
@@ -19,6 +20,7 @@ use config::get_config;
use dir_walker::{walk_it, WalkData}; use dir_walker::{walk_it, WalkData};
use filter::get_biggest; use filter::get_biggest;
use filter_type::get_all_file_types; use filter_type::get_all_file_types;
use rayon::ThreadPoolBuildError;
use regex::Regex; use regex::Regex;
use std::cmp::max; use std::cmp::max;
use std::path::PathBuf; use std::path::PathBuf;
@@ -154,11 +156,10 @@ fn main() {
by_filecount, by_filecount,
ignore_hidden: config.get_ignore_hidden(&options), ignore_hidden: config.get_ignore_hidden(&options),
}; };
// Larger stack size to handle cases with lots of nested directories let pool = panic::catch_unwind(init_rayon);
rayon::ThreadPoolBuilder::new() if pool.is_err() {
.stack_size(usize::pow(1024, 3)) eprintln!("Warning: Could not configure threads {:?}", pool.err());
.build_global() }
.unwrap_or_else(|e| eprintln!("Warning: Could not configure threads {:?}", e));
let iso = config.get_iso(&options); let iso = config.get_iso(&options);
let (top_level_nodes, has_errors) = walk_it(simplified_dirs, walk_data); let (top_level_nodes, has_errors) = walk_it(simplified_dirs, walk_data);
@@ -191,3 +192,10 @@ fn main() {
) )
} }
} }
fn init_rayon() -> Result<(), ThreadPoolBuildError> {
// Larger stack size to handle cases with lots of nested directories
rayon::ThreadPoolBuilder::new()
.stack_size(usize::pow(1024, 3))
.build_global()
}