mirror of
https://github.com/NixOS/nix
synced 2025-06-28 17:51:15 +02:00
* Fix a race condition with parallel builds where multiple
fixed-output derivations or substitutions try to build the same store path at the same time. Locking generally catches this, but not between multiple goals in the same process. This happened especially often (actually, only) in the build farm with fetchurl downloads of the same file being executed on multiple machines and then copied back to the main machine where they would clobber each other (NIXBF-13). Solution: if a goal notices that the output path is already locked, then go to sleep until another goal finishes (hopefully the one locking the path) and try again.
This commit is contained in:
parent
bc0429b1cd
commit
c970b28ba0
3 changed files with 96 additions and 10 deletions
|
@ -223,5 +223,12 @@ void PathLocks::setDeletion(bool deletePaths)
|
|||
this->deletePaths = deletePaths;
|
||||
}
|
||||
|
||||
|
||||
bool pathIsLockedByMe(const Path & path)
|
||||
{
|
||||
Path lockPath = path + ".lock";
|
||||
return lockedPaths.find(lockPath) != lockedPaths.end();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue