aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Bauer <mjbauer95@gmail.com>2021-05-12 12:15:32 -0500
committerMatthew Bauer <mjbauer95@gmail.com>2021-05-12 12:15:32 -0500
commit9a143358454ba8268b72846ae3a5ef65f814e660 (patch)
tree3f33da18c1689e1403a651309ef1cf2007f47fa4 /src
parentd169eb2a1badc5ea32d21bc757d767927ba813c5 (diff)
Relock wait for build slot goals
When we don’t have enough free job slots to run a goal, we put it in the waitForBuildSlot list & unlock its output locks. This will continue from where we left off (tryLocalBuild). However, we need the locks to get reacquired when/if the goal ever restarts. So, we need to send it back through tryToBuild to get reqacquire those locks. I think this bug was introduced in https://github.com/NixOS/nix/pull/4570. It leads to some builds starting without proper locks.
Diffstat (limited to 'src')
-rw-r--r--src/libstore/build/local-derivation-goal.cc1
1 files changed, 1 insertions, 0 deletions
diff --git a/src/libstore/build/local-derivation-goal.cc b/src/libstore/build/local-derivation-goal.cc
index 9c14c06b4..3de12c6ff 100644
--- a/src/libstore/build/local-derivation-goal.cc
+++ b/src/libstore/build/local-derivation-goal.cc
@@ -153,6 +153,7 @@ void LocalDerivationGoal::killChild()
void LocalDerivationGoal::tryLocalBuild() {
unsigned int curBuilds = worker.getNrLocalBuilds();
if (curBuilds >= settings.maxBuildJobs) {
+ state = &DerivationGoal::tryToBuild;
worker.waitForBuildSlot(shared_from_this());
outputLocks.unlock();
return;