summaryrefslogtreecommitdiffstats
path: root/src/build.cc
diff options
context:
space:
mode:
authorEvan Martin <martine@danga.com>2013-03-26 17:40:08 (GMT)
committerEvan Martin <martine@danga.com>2013-03-26 17:40:08 (GMT)
commit543f3edb5c8031aecdf176050065e35101e1992f (patch)
tree8cc37cefe864d2ed7e7d31ee8d1bd31a6f7ab59e /src/build.cc
parent091cf489fb795405b926cff6a08f146f45c0f28a (diff)
parent55be532e10777b050da68e3baede42181202558c (diff)
downloadNinja-543f3edb5c8031aecdf176050065e35101e1992f.zip
Ninja-543f3edb5c8031aecdf176050065e35101e1992f.tar.gz
Ninja-543f3edb5c8031aecdf176050065e35101e1992f.tar.bz2
Merge pull request #521 from riannucci/ignore_duplicate_edges_in_shcedule_work
Fix duplicate edge Pool crash in the minimally invasive way
Diffstat (limited to 'src/build.cc')
-rw-r--r--src/build.cc6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/build.cc b/src/build.cc
index 1e3ad9e..ae47a50 100644
--- a/src/build.cc
+++ b/src/build.cc
@@ -425,6 +425,12 @@ Edge* Plan::FindWork() {
void Plan::ScheduleWork(Edge* edge) {
Pool* pool = edge->pool();
if (pool->ShouldDelayEdge()) {
+ // The graph is not completely clean. Some Nodes have duplicate Out edges.
+ // We need to explicitly ignore these here, otherwise their work will get
+ // scheduled twice (see https://github.com/martine/ninja/pull/519)
+ if (ready_.count(edge)) {
+ return;
+ }
pool->DelayEdge(edge);
pool->RetrieveReadyEdges(&ready_);
} else {