Commit 2626f17

Barrett Ruth  ·  2026-10-26 09:19:26 -0400 EDT
parent 1a6ce3c
fix: close the client signal pipe when the client loop exits (#286)
2 files changed,  +8, -0
▶ M src/loop.zig
+1, -0
jump to top
......@@ -31,6 +31,7 @@ pub fn clientLoop(client_sock_fd: i32, env_str: []const u8) !ClientResult {
3131 defer lib_posix.close(client_sock_fd);
3232
3333 try signal.openSignalPipe();
34+ defer signal.closeSignalPipe();
3435 signal.installWakeHandler(@backingInt(lib_posix.SIG.WINCH));
3536
3637 // Make socket non-blocking to avoid blocking on writes
+7, -0
jump to top
......@@ -37,6 +37,13 @@ pub fn openSignalPipe() !void {
3737 sig_pipe = try lib_posix.pipe2(.{ .CLOEXEC = true, .NONBLOCK = true });
3838 }
3939
40+pub fn closeSignalPipe() void {
41+ const fds = sig_pipe;
42+ sig_pipe = .{ -1, -1 };
43+ lib_posix.close(fds[0]);
44+ lib_posix.close(fds[1]);
45+}
46+
4047 pub fn drainSignalPipe() void {
4148 var b: [16]u8 = undefined;
4249 while (true) {