commit c32e0d3000f4ee539c00577b75e18c683e84f2c4 (tree)
parent b16890e6ddb451301f09029e3b0649168dc53918
Author: Ryan Liptak <squeek502@hotmail.com>
Date: Sat, 9 Mar 2024 17:47:56 -0800
Fix progress when multiple zig rc child processes are building resinator
Diffstat:
2 files changed, 11 insertions(+), 5 deletions(-)
diff --git a/lib/compiler/resinator/main.zig b/lib/compiler/resinator/main.zig
@@ -47,9 +47,9 @@ pub fn main() !void {
};
if (zig_integration) {
- // Send progress with an empty string to indicate that the building of the
+ // Send progress with a special string to indicate that the building of the
// resinator binary is finished and we've moved on to actually compiling the .rc file
- try error_handler.server.serveStringMessage(.progress, "");
+ try error_handler.server.serveStringMessage(.progress, "<resinator>");
}
var options = options: {
diff --git a/src/Compilation.zig b/src/Compilation.zig
@@ -5042,12 +5042,18 @@ fn spawnZigRc(
},
.progress => {
node_name.clearRetainingCapacity();
- if (body.len > 0) {
+ // <resinator> is a special string that indicates that the child
+ // process has reached resinator's main function
+ if (std.mem.eql(u8, body, "<resinator>")) {
+ child_progress_node.setName(src_basename);
+ }
+ // Ignore 0-length strings since if multiple zig rc commands
+ // are executed at the same time, only one will send progress strings
+ // while the other(s) will send empty strings.
+ else if (body.len > 0) {
try node_name.appendSlice(arena, "build 'zig rc'... ");
try node_name.appendSlice(arena, body);
child_progress_node.setName(node_name.items);
- } else {
- child_progress_node.setName(src_basename);
}
},
else => {}, // ignore other messages