Commit 3e174ee1ac

Andrew Kelley <andrew@ziglang.org>
2025-01-24 21:19:41
frontend: fix data race with mingw crt files
1 parent d3f4e9d
Changed files (1)
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,