fix: atomic-rename host-cache PCMs to close concurrent-build race
All checks were successful
CI / build-test-release (pull_request) Successful in 11m50s
All checks were successful
CI / build-test-release (pull_request) Successful in 11m50s
Two crafter-build invocations sharing XDG_CACHE_HOME used to clobber each other's writes to <cache>/<target>-<march>/std.pcm and the Crafter.Build-*.pcm modules: each LoadProject path wrote directly to the final path, so a reader could see a half-written file and die with "malformed or corrupted precompiled file: 'can't skip to bit X from Y'" (issue #14). Every BuildStdPcm / EnsureCrafterBuildPcms write now goes via <final>.tmp.<pid>.<seq> and atomic-renames into place; concurrent writers always see either the old or the new file, never torn bytes. The mingw-on- Linux std.cppm copy is per-PID for the same reason. Adds a regression test (ConcurrentCacheRace) that races four LoadProject() calls against a cold scratch cache — reproduces the race 5/5 without the fix and passes 5/5 with it. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
parent
a930a4abbd
commit
96d1df9233
3 changed files with 237 additions and 12 deletions
|
|
@ -107,6 +107,12 @@ extern "C" Configuration CrafterBuildProject(std::span<const std::string_view> a
|
|||
cfg.AddTest("VariantId").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("WasiBrowserRuntime").Dependencies({ crafterBuildLib.get() });
|
||||
cfg.AddTest("RunSingleTestExit").Dependencies({ crafterBuildLib.get() });
|
||||
// LoadProject dlopens the synthesized project.so, which references
|
||||
// Crafter:: symbols (HostTarget, Configuration ctors) that have to be
|
||||
// visible from the test exe — same wiring crafter-build itself uses
|
||||
// for project.so.
|
||||
cfg.AddTest("ConcurrentCacheRace").Dependencies({ crafterBuildLib.get() })
|
||||
.LinkFlag("-Wl,--export-dynamic").LinkFlag("-ldl");
|
||||
}
|
||||
|
||||
return cfg;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue