#[derive(Debug)]
struct EyreDedupHandler {
- backtrace: Backtrace,
+ backtrace: Arc<parking_lot::Mutex<Backtrace>>,
}
type EyreDynError<'r> = &'r (dyn std::error::Error + 'static);
}
}
- let backtrace = &self.backtrace;
+ let mut backtrace = self.backtrace.lock();
+ backtrace.resolve();
write!(f, "\n\nStack backtrace:\n{:?}", backtrace)?;
}
#[throws(fmt::Error)]
pub fn dedup_eyre_setup() {
eyre::set_hook(Box::new(|_error| {
let backtrace = Backtrace::new_unresolved();
+ let backtrace = Arc::new(backtrace.into());
Box::new(EyreDedupHandler { backtrace })
}))
.context("set error handler")?;