forked from 1b-agent/fieldcraft-upstream
app: a termination signal closes the window the normal way, not as a crash (#248)
SIGTERM, SIGINT and SIGHUP ended the process on the spot: no last autosave, and the crash journal left behind became an unclean_exit report at the next start. The report on #248's machine ("ended without a clean exit between commands (last: control ui.capture)") has that exact signature and is reproduced by kill -TERM after a capture; 500 captures of the solved crank-mirror (50 app runs), 30 CLI snapshots and 250 MCP headless screenshots exited cleanly. The first signal now asks the window to close; a second ends the process with the signal's default action. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UhhZMBTviDQxZvwnyP89fo
This commit is contained in:
1 parent
3d38753cad
commit
02b408c499
5 files changed
+170
-2
No files matched your search
@@ -12,6 +12,7 @@
|
||||
#![forbid(unsafe_code)]
|
||||
|
||||
mod control_server;
|
||||
mod terminate;
|
||||
mod update;
|
||||
mod usage;
|
||||
|
||||
@@ -267,6 +268,14 @@ fn main() -> eframe::Result {
|
||||
log::info!("graphics {:?} {} ({}), MSAA {}x (requested {MSAA}x)", info.backend, info.name, info.driver, rs.msaa_samples);
|
||||
app.set_wgpu(rs, DEPTH_BITS, rs.msaa_samples, &cc.egui_ctx);
|
||||
}
|
||||
// `kill`, Ctrl-C or a logout closes the window as Close does: autosaved, no crash (#248).
|
||||
let ctx = cc.egui_ctx.clone();
|
||||
if let Err(e) = terminate::watch(move || {
|
||||
ctx.send_viewport_cmd(egui::ViewportCommand::Close);
|
||||
ctx.request_repaint();
|
||||
}) {
|
||||
log::warn!("termination signals: {e}");
|
||||
}
|
||||
if let Some(port) = args.control {
|
||||
app = app.with_control(control_server::start(port, cc.egui_ctx.clone()));
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user