1
0
Fork 0
mirror of https://github.com/NixOS/nix synced 2025-07-07 10:11: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 (!outputLocks.lockPaths(lockFiles, "", false))
if (!actLock) {
actLock = std::make_unique<Activity>(*logger, lvlWarn, actBuildWaiting, Activity act(*logger, lvlWarn, actBuildWaiting,
fmt("waiting for lock on %s", Magenta(showPaths(lockFiles)))); 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 /* Now check again whether the outputs are valid. This is because
another process may have started building in parallel. After another process may have started building in parallel. After