1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-07 01:51:47 +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:
John Ericson 2025-03-16 19:21:21 -04:00
parent 7f8d348f3d
commit 1c022077ea

View file

@ -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