zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

commit 3e174ee1ac8f43fa612da6630267990569b48480 (tree)
parent d3f4e9d4ac9772d0916fc6c33145789054532ea4
Author: Andrew Kelley <andrew@ziglang.org>
Date:   Fri, 24 Jan 2025 12:19:41 -0800

frontend: fix data race with mingw crt files

Diffstat:
Msrc/mingw.zig | 8+++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/mingw.zig b/src/mingw.zig @@ -266,12 +266,16 @@ pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void { if (try man.hit()) { const digest = man.final(); + const sub_path = try std.fs.path.join(gpa, &.{ "o", &digest, final_lib_basename }); + errdefer gpa.free(sub_path); + comp.mutex.lock(); + defer comp.mutex.unlock(); try comp.crt_files.ensureUnusedCapacity(gpa, 1); comp.crt_files.putAssumeCapacityNoClobber(final_lib_basename, .{ .full_object_path = .{ .root_dir = comp.global_cache_directory, - .sub_path = try std.fs.path.join(gpa, &.{ "o", &digest, final_lib_basename }), + .sub_path = sub_path, }, .lock = man.toOwnedLock(), }); @@ -360,6 +364,8 @@ pub fn buildImportLib(comp: *Compilation, lib_name: []const u8) !void { log.warn("failed to write cache manifest for DLL import {s}.lib: {s}", .{ lib_name, @errorName(err) }); }; + comp.mutex.lock(); + defer comp.mutex.unlock(); try comp.crt_files.putNoClobber(gpa, final_lib_basename, .{ .full_object_path = .{ .root_dir = comp.global_cache_directory,