fix(shutdown): stop instances before app exit

Prevent desktop wrappers from SIGKILLing the CLI during shutdown, which could orphan OpenCode workspace processes. Shut down workspaces earlier/in parallel and increase the quit grace period.
This commit is contained in:
Shantur Rathore
2026-01-25 11:01:50 +00:00
parent 9ee7ff9509
commit c74e0b89f7
5 changed files with 59 additions and 34 deletions

View File

@@ -163,7 +163,8 @@ fn main() {
.build(tauri::generate_context!())
.expect("error while building tauri application")
.run(|app_handle, event| match event {
tauri::RunEvent::ExitRequested { .. } => {
tauri::RunEvent::ExitRequested { api, .. } => {
api.prevent_exit();
let app = app_handle.clone();
std::thread::spawn(move || {
if let Some(state) = app.try_state::<AppState>() {
@@ -173,18 +174,18 @@ fn main() {
});
}
tauri::RunEvent::WindowEvent {
event: tauri::WindowEvent::Destroyed,
event: tauri::WindowEvent::CloseRequested { api, .. },
..
} => {
if app_handle.webview_windows().len() <= 1 {
let app = app_handle.clone();
std::thread::spawn(move || {
if let Some(state) = app.try_state::<AppState>() {
let _ = state.manager.stop();
}
app.exit(0);
});
}
// Ensure we have time to stop the CLI process before the app exits.
api.prevent_close();
let app = app_handle.clone();
std::thread::spawn(move || {
if let Some(state) = app.try_state::<AppState>() {
let _ = state.manager.stop();
}
app.exit(0);
});
}
_ => {}
});