Fix finishing steps that are not top-level of any build

This commit is contained in:
Eelco Dolstra 2015-06-18 17:37:35 +02:00
parent 9cdbff2fdf
commit 89b629eeb1

View file

@ -1119,7 +1119,8 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
} }
/* If there are no builds left to update in the DB, /* If there are no builds left to update in the DB,
then we're done. Delete the step from then we're done (except for calling
finishBuildStep()). Delete the step from
steps. Since we've been holding the steps lock, steps. Since we've been holding the steps lock,
no new referrers can have been added in the no new referrers can have been added in the
meantime or be added afterwards. */ meantime or be added afterwards. */
@ -1127,7 +1128,6 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath); printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath);
nrStepsDone++; nrStepsDone++;
steps_->erase(step->drvPath); steps_->erase(step->drvPath);
break;
} }
} }
@ -1144,6 +1144,8 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
txn.commit(); txn.commit();
} }
if (direct.empty()) break;
/* Remove the direct dependencies from builds. This will /* Remove the direct dependencies from builds. This will
cause them to be destroyed. */ cause them to be destroyed. */
for (auto & b : direct) { for (auto & b : direct) {