From 4f870fca7c363764d80e668c3a326040a9a8497e Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 23 Nov 2023 16:27:13 -0800 Subject: [PATCH] set_input_delay -reference_pin seg fault Signed-off-by: James Cherry --- search/Bfs.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/search/Bfs.cc b/search/Bfs.cc index 8daf1d0c..d634cf2f 100644 --- a/search/Bfs.cc +++ b/search/Bfs.cc @@ -143,17 +143,19 @@ BfsIterator::visit(Level to_level, && levelLessOrEqual(first_level_, to_level)) { VertexSeq &level_vertices = queue_[first_level_]; incrLevel(first_level_); - if (!level_vertices.empty()) { - for (auto vertex : level_vertices) { - if (vertex) { - vertex->setBfsInQueue(bfs_index_, false); - visitor->visit(vertex); - visit_count++; - } + // Note that ArrivalVisitor::enqueueRefPinInputDelays may enqueue + // vertices at this level so range iteration fails if the vector grows. + while (!level_vertices.empty()) { + Vertex *vertex = level_vertices.back(); + level_vertices.pop_back(); + if (vertex) { + vertex->setBfsInQueue(bfs_index_, false); + visitor->visit(vertex); + visit_count++; } - level_vertices.clear(); - visitor->levelFinished(); } + level_vertices.clear(); + visitor->levelFinished(); } return visit_count; }