zig
zig copied to clipboard
std.Build.Step.Compile: fix race condition in args file creation
Fixes #23993
Previously, if multiple build processes tried to create the same args file, there was a race condition with the use of the non-atomic writeFile
function which could cause a spawned compiler to read an empty or incomplete args file. This commit avoids the race condition by first writing to a temporary file with a random path and renaming it to the desired path.
This follows the same strategy as the package fetching code, including the convention of tmp/<random u64 hex>
as the temporary file name.
I tested this with the original reproducer from the linked issue, and I'm no longer seeing any errors with this change applied. I also tested it with the .zig-cache
directory deleted, to make sure it works properly on the first run, before the args file is created.