diff --git a/src/Server.zig b/src/Server.zig index e43313da..d172f6dd 100644 --- a/src/Server.zig +++ b/src/Server.zig @@ -64,17 +64,17 @@ pub fn init(app: *App, address: net.Address) !*Server { return self; } -pub fn deinit(self: *Server) void { - // Stop all active clients - { - self.client_mutex.lock(); - defer self.client_mutex.unlock(); +pub fn shutdown(self: *Server) void { + self.client_mutex.lock(); + defer self.client_mutex.unlock(); - for (self.clients.items) |client| { - client.stop(); - } + for (self.clients.items) |client| { + client.stop(); } +} +pub fn deinit(self: *Server) void { + self.shutdown(); self.joinThreads(); self.clients.deinit(self.allocator); self.clients_pool.deinit(); diff --git a/src/main.zig b/src/main.zig index d9c1e8ee..640f8231 100644 --- a/src/main.zig +++ b/src/main.zig @@ -115,6 +115,8 @@ fn run(allocator: Allocator, main_arena: Allocator) !void { }; defer server.deinit(); + try sighandler.on(lp.Server.shutdown, .{server}); + app.network.run(); }, .fetch => |opts| { diff --git a/src/network/Runtime.zig b/src/network/Runtime.zig index a47a1948..72aebe81 100644 --- a/src/network/Runtime.zig +++ b/src/network/Runtime.zig @@ -491,7 +491,7 @@ fn acceptConnections(self: *Runtime) void { error.ConnectionAborted => { lp.log.warn(.app, "accept connection aborted", .{}); continue; - }, + }, else => { lp.log.err(.app, "accept error", .{ .err = err }); continue;