chiark / gitweb /
eyre: resolve the backtrace
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 15:58:11 +0000 (16:58 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 7 Aug 2021 15:59:22 +0000 (16:59 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/reporter.rs

index 926b094e46d9408eff26ac89caf6122da3c5120b..0daa0a6f6c7b89f179aba38452c3f8a0a0978d74 100644 (file)
@@ -109,7 +109,7 @@ use indenter::indented;
 
 #[derive(Debug)]
 struct EyreDedupHandler {
-  backtrace: Backtrace,
+  backtrace: Arc<parking_lot::Mutex<Backtrace>>,
 }
 
 type EyreDynError<'r> = &'r (dyn std::error::Error + 'static);
@@ -137,7 +137,8 @@ impl eyre::EyreHandler for EyreDedupHandler {
             }
         }
 
-        let backtrace = &self.backtrace;
+        let mut backtrace = self.backtrace.lock();
+        backtrace.resolve();
         write!(f, "\n\nStack backtrace:\n{:?}", backtrace)?;
   }
   #[throws(fmt::Error)]
@@ -150,6 +151,7 @@ impl eyre::EyreHandler for EyreDedupHandler {
 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")?;