mirror of
https://codeberg.org/ziglang/zig.git
synced 2026-04-27 19:09:47 +03:00
Build.WebServer: update concurrency API usage
This commit is contained in:
@@ -542,6 +542,7 @@ fn zigProcessUpdate(s: *Step, zp: *ZigProcess, watch: bool, web_server: ?*Build.
|
||||
const stdout = &stdout_reader.interface;
|
||||
|
||||
var body_buffer: std.ArrayList(u8) = .empty;
|
||||
defer body_buffer.deinit(gpa);
|
||||
|
||||
while (true) {
|
||||
const Header = std.zig.Server.Message.Header;
|
||||
|
||||
+23
-13
@@ -588,11 +588,12 @@ fn buildClientWasm(ws: *WebServer, arena: Allocator, optimize: std.builtin.Optim
|
||||
});
|
||||
defer child.kill(io);
|
||||
|
||||
var poller = Io.poll(gpa, enum { stdout, stderr }, .{
|
||||
.stdout = child.stdout.?,
|
||||
.stderr = child.stderr.?,
|
||||
});
|
||||
defer poller.deinit();
|
||||
var stderr_task = try io.concurrent(readStreamAlloc, .{ gpa, io, child.stderr.?, .unlimited });
|
||||
defer if (stderr_task.cancel(io)) |slice| gpa.free(slice) else |_| {};
|
||||
|
||||
var stdout_buffer: [512]u8 = undefined;
|
||||
var stdout_reader: Io.File.Reader = .initStreaming(child.stdout.?, io, &stdout_buffer);
|
||||
const stdout = &stdout_reader.interface;
|
||||
|
||||
try child.stdin.?.writeStreamingAll(io, @ptrCast(@as([]const std.zig.Client.Message.Header, &.{
|
||||
.{ .tag = .update, .bytes_len = 0 },
|
||||
@@ -600,16 +601,17 @@ fn buildClientWasm(ws: *WebServer, arena: Allocator, optimize: std.builtin.Optim
|
||||
})));
|
||||
|
||||
const Header = std.zig.Server.Message.Header;
|
||||
|
||||
var result: ?Cache.Path = null;
|
||||
var result_error_bundle = std.zig.ErrorBundle.empty;
|
||||
var body_buffer: std.ArrayList(u8) = .empty;
|
||||
defer body_buffer.deinit(gpa);
|
||||
|
||||
const stdout = poller.reader(.stdout);
|
||||
|
||||
poll: while (true) {
|
||||
while (stdout.buffered().len < @sizeOf(Header)) if (!(try poller.poll())) break :poll;
|
||||
const header = stdout.takeStruct(Header, .little) catch unreachable;
|
||||
while (stdout.buffered().len < header.bytes_len) if (!try poller.poll()) break :poll;
|
||||
const body = stdout.take(header.bytes_len) catch unreachable;
|
||||
while (true) {
|
||||
const header = try stdout.takeStruct(Header, .little);
|
||||
body_buffer.clearRetainingCapacity();
|
||||
try stdout.appendExact(gpa, &body_buffer, header.bytes_len);
|
||||
const body = body_buffer.items;
|
||||
|
||||
switch (header.tag) {
|
||||
.zig_version => {
|
||||
@@ -636,7 +638,7 @@ fn buildClientWasm(ws: *WebServer, arena: Allocator, optimize: std.builtin.Optim
|
||||
}
|
||||
}
|
||||
|
||||
const stderr_contents = try poller.toOwnedSlice(.stderr);
|
||||
const stderr_contents = try stderr_task.await(io);
|
||||
if (stderr_contents.len > 0) {
|
||||
std.debug.print("{s}", .{stderr_contents});
|
||||
}
|
||||
@@ -697,6 +699,14 @@ fn buildClientWasm(ws: *WebServer, arena: Allocator, optimize: std.builtin.Optim
|
||||
return base_path.join(arena, bin_name);
|
||||
}
|
||||
|
||||
fn readStreamAlloc(gpa: Allocator, io: Io, file: Io.File, limit: Io.Limit) ![]u8 {
|
||||
var file_reader: Io.File.Reader = .initStreaming(file, io, &.{});
|
||||
return file_reader.interface.allocRemaining(gpa, limit) catch |err| switch (err) {
|
||||
error.ReadFailed => return file_reader.err.?,
|
||||
else => |e| return e,
|
||||
};
|
||||
}
|
||||
|
||||
pub fn updateTimeReportCompile(ws: *WebServer, opts: struct {
|
||||
compile: *Build.Step.Compile,
|
||||
|
||||
|
||||
Reference in New Issue
Block a user