mirror of
https://github.com/NixOS/nix
synced 2025-07-07 06:01:48 +02:00
Get rid of on usage pair of actLock
Now that we have coroutines, we can go back to loops and regular RAII, which is must less error-proone! I look forward to removing the other instances!
This commit is contained in:
parent
7f8d348f3d
commit
1c022077ea
1 changed files with 10 additions and 8 deletions
|
@ -594,16 +594,18 @@ Goal::Co DerivationGoal::tryToBuild()
|
|||
}
|
||||
}
|
||||
|
||||
if (!outputLocks.lockPaths(lockFiles, "", false)) {
|
||||
if (!actLock)
|
||||
actLock = std::make_unique<Activity>(*logger, lvlWarn, actBuildWaiting,
|
||||
if (!outputLocks.lockPaths(lockFiles, "", false))
|
||||
{
|
||||
Activity act(*logger, lvlWarn, actBuildWaiting,
|
||||
fmt("waiting for lock on %s", Magenta(showPaths(lockFiles))));
|
||||
worker.waitForAWhile(shared_from_this());
|
||||
co_await Suspend{};
|
||||
co_return tryToBuild();
|
||||
}
|
||||
|
||||
actLock.reset();
|
||||
/* Wait then try locking again, repeat until success (returned
|
||||
boolean is true). */
|
||||
do {
|
||||
worker.waitForAWhile(shared_from_this());
|
||||
co_await Suspend{};
|
||||
} while (!outputLocks.lockPaths(lockFiles, "", false));
|
||||
}
|
||||
|
||||
/* Now check again whether the outputs are valid. This is because
|
||||
another process may have started building in parallel. After
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue