From 3e174ee1ac8f43fa612da6630267990569b48480 Mon Sep 17 00:00:00 2001 From: Andrew Kelley Date: Fri, 24 Jan 2025 12:19:41 -0800 Subject: [PATCH] frontend: fix data race with mingw crt files --- src/mingw.zig | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/mingw.zig b/src/mingw.zig index eeed1e6f06..47aff05133 100644 --- 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,