authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2026-03-24 06:23:56-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2026-03-27 03:28:50+01:00
log49a258c0e00d8221d088d283a4bd4fb7b0f6b21f
tree68a9df2ed0f24f77d9cd2fe769eeea647305e35e
parent49fa67d8265acfa0621e88acbad1fa598f128468

std.Build.Step.Run: improve syscalls while running zig test executables

Previously, each message requires an unseekable error to be returned from a syscall before proceeding. Ideally, the code would just pass around `*std.Io.Writer` instead of `std.Io.File` in the first place, but even then, you could argue for saving a syscall with `writerStreaming`.

1 files changed, 4 insertions(+), 4 deletions(-)

lib/std/Build/Step/Run.zig+4-4
......@@ -2126,7 +2126,7 @@ fn sendMessage(io: Io, file: Io.File, tag: std.zig.Client.Message.Tag) !void {
21262126 .tag = tag,
21272127 .bytes_len = 0,
21282128 };
2129 var w = file.writer(io, &.{});
2129 var w = file.writerStreaming(io, &.{});
21302130 w.interface.writeStruct(header, .little) catch |err| switch (err) {
21312131 error.WriteFailed => return w.err.?,
21322132 };
......@@ -2137,7 +2137,7 @@ fn sendRunTestMessage(io: Io, file: Io.File, tag: std.zig.Client.Message.Tag, in
21372137 .tag = tag,
21382138 .bytes_len = 4,
21392139 };
2140 var w = file.writer(io, &.{});
2140 var w = file.writerStreaming(io, &.{});
21412141 w.interface.writeStruct(header, .little) catch |err| switch (err) {
21422142 error.WriteFailed => return w.err.?,
21432143 };
......@@ -2157,7 +2157,7 @@ fn sendRunFuzzTestMessage(
21572157 .tag = .start_fuzzing,
21582158 .bytes_len = 4 + 1 + 8,
21592159 };
2160 var w = file.writer(io, &.{});
2160 var w = file.writerStreaming(io, &.{});
21612161 w.interface.writeStruct(header, .little) catch |err| switch (err) {
21622162 error.WriteFailed => return w.err.?,
21632163 };
......@@ -2202,7 +2202,7 @@ fn evalGeneric(run: *Run, spawn_options: process.SpawnOptions) !EvalGenericResul
22022202 var read_buffer: [1024]u8 = undefined;
22032203 var file_reader = file.reader(io, &read_buffer);
22042204 var write_buffer: [1024]u8 = undefined;
2205 var stdin_writer = child.stdin.?.writer(io, &write_buffer);
2205 var stdin_writer = child.stdin.?.writerStreaming(io, &write_buffer);
22062206 _ = stdin_writer.interface.sendFileAll(&file_reader, .unlimited) catch |err| switch (err) {
22072207 error.ReadFailed => return run.step.fail("failed to read from {f}: {t}", .{
22082208 path, file_reader.err.?,