diff options
author | Matthew Bauer <mjbauer95@gmail.com> | 2021-05-12 12:15:32 -0500 |
---|---|---|
committer | Matthew Bauer <mjbauer95@gmail.com> | 2021-05-12 12:15:32 -0500 |
commit | 9a143358454ba8268b72846ae3a5ef65f814e660 (patch) | |
tree | 3f33da18c1689e1403a651309ef1cf2007f47fa4 /src/libstore/build/local-derivation-goal.cc | |
parent | d169eb2a1badc5ea32d21bc757d767927ba813c5 (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/libstore/build/local-derivation-goal.cc')
-rw-r--r-- | src/libstore/build/local-derivation-goal.cc | 1 |
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; |