}
}
-void Plan::ResumeDelayedJobs(Edge* edge) {
- edge->pool()->EdgeFinished(*edge);
- edge->pool()->RetrieveReadyEdges(&ready_);
-}
-
-void Plan::EdgeFinished(Edge* edge, bool directly_wanted) {
+void Plan::EdgeFinished(Edge* edge) {
map<Edge*, bool>::iterator e = want_.find(edge);
assert(e != want_.end());
- if (e->second)
+ bool directly_wanted = e->second;
+ if (directly_wanted)
--wanted_edges_;
want_.erase(e);
edge->outputs_ready_ = true;
- // See if this job frees up any delayed jobs
+ // See if this job frees up any delayed jobs.
if (directly_wanted)
- ResumeDelayedJobs(edge);
- else
- edge->pool()->RetrieveReadyEdges(&ready_);
+ edge->pool()->EdgeFinished(*edge);
+ edge->pool()->RetrieveReadyEdges(&ready_);
// Check off any nodes we were waiting for with this edge.
for (vector<Node*>::iterator o = edge->outputs_.begin();
} else {
// We do not need to build this edge, but we might need to build one of
// its dependents.
- EdgeFinished(*oe, want_e->second);
+ EdgeFinished(*oe);
}
}
}
/// Mark an edge as done building. Used internally and by
/// tests.
- void EdgeFinished(Edge* edge, bool directly_wanted = true);
+ void EdgeFinished(Edge* edge);
/// Clean the given node during the build.
/// Return false on error.
/// currently-full pool.
void ScheduleWork(Edge* edge);
- /// Allows jobs blocking on |edge| to potentially resume.
- /// For example, if |edge| is a member of a pool, calling this may schedule
- /// previously pending jobs in that pool.
- void ResumeDelayedJobs(Edge* edge);
-
/// Keep track of which edges we want to build in this plan. If this map does
/// not contain an entry for an edge, we do not want to build the entry or its
/// dependents. If an entry maps to false, we do not want to build it, but we