fix: daemon lifecycle cleanup and error logging improvements

- Refactor HealthDaemon to use a tracked session (AbortController + awaitable
  promise) instead of fire-and-forget health check loops, preventing health
  checks from running after a service is stopped
- Stop health checks before terminating daemon to avoid false crash reports
  during intentional shutdown
- Guard onExit callbacks with AbortSignal to prevent stale session callbacks
- Add logErrorOnce utility to deduplicate repeated error logging
- Fix SystemForEmbassy.stop() to capture clean promise before deleting ref
- Treat SIGTERM (signal 15) as successful exit in subcontainer sync
- Fix asError to return original Error instead of wrapping in new Error
- Remove unused ExtendedVersion import from Backups.ts
This commit is contained in:
Aiden McClelland
2026-03-20 13:35:24 -06:00
parent b54f10af55
commit 7335e52ab3
10 changed files with 73 additions and 52 deletions

View File

@@ -768,7 +768,7 @@ pub fn exec(
stderr_thread.map(|t| t.join().unwrap());
if let Some(code) = exit.code() {
std::process::exit(code);
} else if exit.success() {
} else if exit.success() || exit.signal() == Some(15) {
Ok(())
} else {
Err(Error::new(