diff options
Diffstat (limited to 'src/app_state.rs')
| -rw-r--r-- | src/app_state.rs | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/app_state.rs b/src/app_state.rs index ed723c2..ecb4689 100644 --- a/src/app_state.rs +++ b/src/app_state.rs @@ -388,13 +388,20 @@ impl AppState { let handles = self .exercises .iter() - .map(|exercise| s.spawn(|| exercise.run_exercise(None, &self.cmd_runner))) + .map(|exercise| { + thread::Builder::new() + .spawn_scoped(s, || exercise.run_exercise(None, &self.cmd_runner)) + }) .collect::<Vec<_>>(); - for (exercise_ind, handle) in handles.into_iter().enumerate() { + for (exercise_ind, spawn_res) in handles.into_iter().enumerate() { write!(stdout, "\rProgress: {exercise_ind}/{n_exercises}")?; stdout.flush()?; + let Ok(handle) = spawn_res else { + return Ok(AllExercisesCheck::CheckedUntil(exercise_ind)); + }; + let Ok(success) = handle.join().unwrap() else { return Ok(AllExercisesCheck::CheckedUntil(exercise_ind)); }; |
