From 155d7c8dfa46da054beaf37d6415d52613e2bb17 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Tue, 22 Jun 2004 09:00:31 +0000 Subject: [PATCH] * Substitutes should occupy a build slot. --- src/libstore/normalise.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) 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; }