authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-19 21:38:08-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2024-07-20 01:06:29-07:00
log7b1d3e72761e646083774e11ccf6a122f7798d35
tree8f6d5a7c5e286e5473415164936efff4f5195096
parent397c9174cb8683ae894beafc97eac23e8aa5a760

compiler server: detect when parent process pipe is broken

closes #18340

1 files changed, 5 insertions(+), 0 deletions(-)

lib/std/zig/Server.zig+5
......@@ -109,6 +109,7 @@ pub fn deinit(s: *Server) void {
109109pub fn receiveMessage(s: *Server) !InMessage.Header {
110110 const Header = InMessage.Header;
111111 const fifo = &s.receive_fifo;
112 var last_amt_zero = false;
112113
113114 while (true) {
114115 const buf = fifo.readableSlice(0);
......@@ -136,6 +137,10 @@ pub fn receiveMessage(s: *Server) !InMessage.Header {
136137 const write_buffer = try fifo.writableWithSize(256);
137138 const amt = try s.in.read(write_buffer);
138139 fifo.update(amt);
140 if (amt == 0) {
141 if (last_amt_zero) return error.BrokenPipe;
142 last_amt_zero = true;
143 }
139144 }
140145}
141146