authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-12-09 22:16:10-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-01-09 15:02:38-07:00
log07f6fc30002b479d711a3a990dab75686cf14bec
tree7d851e643a7107fc90e681a2876e2de001ffb04b
parenta4418a8fd6663f532a021c3ad2ae807a6ccd62cc

Compilation: revert asking for exclusive locks on cache hits

We definitely want a shared lock on a cache hit. Without this, we get a deadlock when Zig is asked to compile the same C source file multiple times as part of the same compilation. This is a partial revert of 8ccb9a6ad327a4d7fbc321b33d4aa66a27a1f5ee. cc @kcbanner

1 files changed, 0 insertions(+), 4 deletions(-)

src/Compilation.zig-4
...@@ -3580,7 +3580,6 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {...@@ -3580,7 +3580,6 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {
3580 const cimport_zig_basename = "cimport.zig";3580 const cimport_zig_basename = "cimport.zig";
35813581
3582 var man = comp.obtainCObjectCacheManifest();3582 var man = comp.obtainCObjectCacheManifest();
3583 man.want_shared_lock = false;
3584 defer man.deinit();3583 defer man.deinit();
35853584
3586 const use_stage1 = build_options.have_stage1 and comp.bin_file.options.use_stage1;3585 const use_stage1 = build_options.have_stage1 and comp.bin_file.options.use_stage1;
...@@ -3698,7 +3697,6 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {...@@ -3698,7 +3697,6 @@ pub fn cImport(comp: *Compilation, c_src: []const u8) !CImportResult {
3698 // possible we had a hit and the manifest is dirty, for example if the file mtime changed but3697 // possible we had a hit and the manifest is dirty, for example if the file mtime changed but
3699 // the contents were the same, we hit the cache but the manifest is dirty and we need to update3698 // the contents were the same, we hit the cache but the manifest is dirty and we need to update
3700 // it to prevent doing a full file content comparison the next time around.3699 // it to prevent doing a full file content comparison the next time around.
3701 man.want_shared_lock = true;
3702 man.writeManifest() catch |err| {3700 man.writeManifest() catch |err| {
3703 log.warn("failed to write cache manifest for C import: {s}", .{@errorName(err)});3701 log.warn("failed to write cache manifest for C import: {s}", .{@errorName(err)});
3704 };3702 };
...@@ -3873,7 +3871,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P...@@ -3873,7 +3871,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
3873 }3871 }
38743872
3875 var man = comp.obtainCObjectCacheManifest();3873 var man = comp.obtainCObjectCacheManifest();
3876 man.want_shared_lock = false;
3877 defer man.deinit();3874 defer man.deinit();
38783875
3879 man.hash.add(comp.clang_preprocessor_mode);3876 man.hash.add(comp.clang_preprocessor_mode);
...@@ -4167,7 +4164,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P...@@ -4167,7 +4164,6 @@ fn updateCObject(comp: *Compilation, c_object: *CObject, c_obj_prog_node: *std.P
4167 // possible we had a hit and the manifest is dirty, for example if the file mtime changed but4164 // possible we had a hit and the manifest is dirty, for example if the file mtime changed but
4168 // the contents were the same, we hit the cache but the manifest is dirty and we need to update4165 // the contents were the same, we hit the cache but the manifest is dirty and we need to update
4169 // it to prevent doing a full file content comparison the next time around.4166 // it to prevent doing a full file content comparison the next time around.
4170 man.want_shared_lock = true;
4171 man.writeManifest() catch |err| {4167 man.writeManifest() catch |err| {
4172 log.warn("failed to write cache manifest when compiling '{s}': {s}", .{ c_object.src.src_path, @errorName(err) });4168 log.warn("failed to write cache manifest when compiling '{s}': {s}", .{ c_object.src.src_path, @errorName(err) });
4173 };4169 };