print what file we paniced on

This commit is contained in:
Robin Appelman 2023-03-25 23:01:58 +01:00
commit 6637e466ab

View file

@ -5,6 +5,7 @@ use std::env::args;
use std::ffi::OsStr;
use std::fs;
use std::hint::black_box;
use std::mem::forget;
use std::sync::atomic::{AtomicUsize, Ordering};
use std::time::{Duration, Instant};
use tf_log_parser::parse;
@ -66,6 +67,8 @@ fn main() -> Result<(), MainError> {
read_time.fetch_add(read_start.elapsed().as_micros() as usize, Ordering::Relaxed);
let parse_start = Instant::now();
on_panic(
|| {
let (output, _) = match parse(&input) {
Ok(val) => val,
Err(e) => {
@ -73,14 +76,16 @@ fn main() -> Result<(), MainError> {
return;
}
};
black_box(output);
},
|| eprintln!("Paniced on {}", path.display()),
);
parse_time.fetch_add(
parse_start.elapsed().as_micros() as usize,
Ordering::Relaxed,
);
count.fetch_add(1, Ordering::Relaxed);
black_box(output);
// let _ = println!("{} messages", output.chat.len());
}
});
@ -103,3 +108,17 @@ fn main() -> Result<(), MainError> {
fn micros_as_sec(micros: usize) -> f32 {
micros as f32 / 1_000_000.0
}
struct PanicCanary<F: Fn() -> ()>(F);
impl<F: Fn() -> ()> Drop for PanicCanary<F> {
fn drop(&mut self) {
(self.0)()
}
}
fn on_panic<F: Fn() -> (), P: Fn() -> ()>(f: F, panic: P) {
let canary = PanicCanary(panic);
f();
forget(canary)
}