fix: os.signal_opt API callback-based (V latest)
CI / test (push) Successful in 2m46s

La nouvelle API est fn(os.Signal, fn(os.Signal)) au lieu de
chan+variadic. Enregistrement séparé pour .hup, .int, .term.
This commit is contained in:
2026-08-03 15:00:39 -04:00
parent 75e438f7d3
commit 26341578fa
+27 -23
View File
@@ -120,30 +120,34 @@ pub fn (mut app App) run() ! {
$if linux || macos {
fn (mut app App) handle_signals() {
mut sigch := chan os.Signal{cap: 10}
os.signal_opt(mut sigch, .int, .term, .hup) or { panic(err) }
for {
sig := <-sigch
match sig {
.hup {
app.logger.info('server', 'reload', 'SIGHUP received, reloading config...')
new_cfg := load_config(app.config_path) or {
app.logger.error('server', 'reload', 'failed to reload config: ${err}')
continue
}
app.cfg = new_cfg
app.webhook_routes = build_webhook_routes(new_cfg)
app.ntfy = new_ntfy_client(new_cfg.server, app.logger)
app.dedup = new_dedup(new_cfg.dedup)
app.logger.info('server', 'reload', 'config reloaded successfully')
}
.int, .term {
app.logger.info('server', 'shutdown', 'received signal, shutting down...')
app.shutdown_flag = true
time.sleep(500 * time.millisecond)
exit(0)
}
// Register SIGHUP handler for config reload
os.signal_opt(.hup, fn [mut app] (sig os.Signal) {
app.logger.info('server', 'reload', 'SIGHUP received, reloading config...')
new_cfg := load_config(app.config_path) or {
app.logger.error('server', 'reload', 'failed to reload config: ${err}')
return
}
app.cfg = new_cfg
app.webhook_routes = build_webhook_routes(new_cfg)
app.ntfy = new_ntfy_client(new_cfg.server, app.logger)
app.dedup = new_dedup(new_cfg.dedup)
app.logger.info('server', 'reload', 'config reloaded successfully')
}) or { panic(err) }
// Common shutdown handler for SIGINT and SIGTERM
shutdown := fn [mut app] (sig os.Signal) {
app.logger.info('server', 'shutdown', 'received signal, shutting down...')
app.shutdown_flag = true
time.sleep(500 * time.millisecond)
exit(0)
}
os.signal_opt(.int, shutdown) or { panic(err) }
os.signal_opt(.term, shutdown) or { panic(err) }
// Keep goroutine alive
for {
time.sleep(60 * time.second)
}
}
}