From 6770aeeb3c4c267f491da5d39feac11d1d853f43 Mon Sep 17 00:00:00 2001 From: Julia Date: Fri, 14 Jul 2023 12:58:50 -0400 Subject: [PATCH] After first panic, ignore others and tear down process even if in thread --- crates/zed/src/main.rs | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/crates/zed/src/main.rs b/crates/zed/src/main.rs index 4c75d370d517423e395119d2ceb4f3c47b61a21b..ccf381b5b11b21f674c9e068973efe53cfa98af0 100644 --- a/crates/zed/src/main.rs +++ b/crates/zed/src/main.rs @@ -36,7 +36,7 @@ use std::{ path::{Path, PathBuf}, str, sync::{ - atomic::{AtomicBool, Ordering}, + atomic::{AtomicBool, AtomicU32, Ordering}, Arc, Weak, }, thread, @@ -405,11 +405,18 @@ struct PanicRequest { token: String, } +static PANIC_COUNT: AtomicU32 = AtomicU32::new(0); + fn init_panic_hook(app: &App, installation_id: Option) { let is_pty = stdout_is_a_pty(); let platform = app.platform(); panic::set_hook(Box::new(move |info| { + let prior_panic_count = PANIC_COUNT.fetch_add(1, Ordering::SeqCst); + if prior_panic_count > 0 { + std::panic::resume_unwind(Box::new(())); + } + let app_version = ZED_APP_VERSION .or_else(|| platform.app_version().ok()) .map_or("dev".to_string(), |v| v.to_string()); @@ -464,7 +471,6 @@ fn init_panic_hook(app: &App, installation_id: Option) { if is_pty { if let Some(panic_data_json) = serde_json::to_string_pretty(&panic_data).log_err() { eprintln!("{}", panic_data_json); - return; } } else { if let Some(panic_data_json) = serde_json::to_string(&panic_data).log_err() { @@ -481,6 +487,8 @@ fn init_panic_hook(app: &App, installation_id: Option) { } } } + + std::process::abort(); })); }