diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/libstore/normalise.cc | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc index 29a6c339cb15..5d68945b07f7 100644 --- a/src/libstore/normalise.cc +++ b/src/libstore/normalise.cc @@ -1218,6 +1218,7 @@ public: void tryNext(); void exprNormalised(); void exprRealised(); + void tryToRun(); void finished(); }; @@ -1302,6 +1303,19 @@ void SubstitutionGoal::exprRealised() { debug(format("store expr realised of `%1%'") % storePath); + state = &SubstitutionGoal::tryToRun; + worker.waitForBuildSlot(shared_from_this()); +} + + +void SubstitutionGoal::tryToRun() +{ + /* Make sure that we are allowed to start a build. */ + if (!worker.canBuildMore()) { + worker.waitForBuildSlot(shared_from_this()); + return; + } + /* What's the substitute program? */ StoreExpr expr = storeExprFromPath(nfSub); assert(expr.type == StoreExpr::neClosure); @@ -1390,7 +1404,7 @@ void SubstitutionGoal::exprRealised() /* parent */ logPipe.writeSide.close(); worker.childStarted(shared_from_this(), - pid, logPipe.readSide, false); + pid, logPipe.readSide, true); state = &SubstitutionGoal::finished; } |