aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/normalise.cc16
1 files changed, 15 insertions, 1 deletions
diff --git a/src/libstore/normalise.cc b/src/libstore/normalise.cc
index 29a6c339c..5d68945b0 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;
}