zig icon indicating copy to clipboard operation
zig copied to clipboard

std.Build.Step.Compile: fix race condition in args file creation

Open ianprime0509 opened this issue 1 month ago • 0 comments

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.

ianprime0509 avatar May 26 '25 19:05 ianprime0509