Wait for IRC listener cleanup and HTTP shutdown on stop (closes #159)
check / check (push) Waiting to run

Stopping the server returned before the IRC listener's connections had
run their cleanup, and the database closed under them, so their
sessions, clients and channel memberships stayed and their nicks stayed
taken after a restart.

The IRC listener's stop now waits up to five seconds for every
connection's cleanup, which now runs on a context that stopping does
not cancel. The HTTP server's stop hook now runs Shutdown itself and
waits for it; httpServer is set before serving starts, and the server's
own signal watcher, which raced fx's stop hooks, is gone.

Model: opus-5-5
This commit is contained in:
2026-10-20 20:32:17 +00:00
parent 292f1eb7a9
commit e03e3a50c2
6 changed files with 430 additions and 48 deletions
+3 -1
View File
@@ -222,7 +222,9 @@ func (c *Conn) serve(
) {
ctx, cancel := context.WithCancel(ctx)
defer cancel()
defer c.cleanup(ctx)
// Stopping the server cancels ctx, and the cleanup must
// still end the session then.
defer c.cleanup(context.WithoutCancel(ctx))
ping := time.AfterFunc(interval, func() {
c.send("PING :" + c.serverSfx)