diff --git a/graph/Graph.cc b/graph/Graph.cc index b3f428d1..3db3e4da 100644 --- a/graph/Graph.cc +++ b/graph/Graph.cc @@ -633,13 +633,6 @@ Graph::deleteRequireds(Vertex *vertex, vertex->setRequireds(arrival_null); } -void -Graph::clearArrivals() -{ - arrivals_.clear(); - requireds_.clear(); -} - PathVertexRep * Graph::makePrevPaths(Vertex *vertex, uint32_t count) @@ -674,19 +667,32 @@ Graph::deletePrevPaths(Vertex *vertex, } void -Graph::clearPrevPaths() +Graph::deletePaths() { + arrivals_.clear(); + requireds_.clear(); prev_paths_.clear(); + VertexIterator vertex_iter(graph_); + while (vertex_iter.hasNext()) { + Vertex *vertex = vertex_iter.next(); + vertex->setArrivals(arrival_null); + vertex->setRequireds(arrival_null); + vertex->setPrevPaths(object_id_null); + vertex->tag_group_index_ = tag_group_index_max; + vertex->crpr_path_pruning_disabled_ = false; + } } -// No locks. void Graph::deletePaths(Vertex *vertex, uint32_t count) { if (vertex->arrivals() != arrival_null) { + LockGuard lock(arrivals_lock_); arrivals_.destroy(vertex->arrivals(), count); vertex->setArrivals(arrival_null); + vertex->tag_group_index_ = tag_group_index_max; + vertex->crpr_path_pruning_disabled_ = false; } if (vertex->requireds() != arrival_null) { requireds_.destroy(vertex->requireds(), count); @@ -697,9 +703,6 @@ Graph::deletePaths(Vertex *vertex, prev_paths_.destroy(vertex->prevPaths(), count); vertex->setPrevPaths(object_id_null); } - - vertex->tag_group_index_ = tag_group_index_max; - vertex->crpr_path_pruning_disabled_ = false; } //////////////////////////////////////////////////////////////// diff --git a/include/sta/Graph.hh b/include/sta/Graph.hh index 01b2b773..3ac640f4 100644 --- a/include/sta/Graph.hh +++ b/include/sta/Graph.hh @@ -107,7 +107,6 @@ public: Required *requireds(Vertex *vertex); void deleteRequireds(Vertex *vertex, uint32_t count); - void clearArrivals(); size_t arrivalCount() const { return arrivals_.size(); } size_t requiredCount() const { return requireds_.size(); } PathVertexRep *makePrevPaths(Vertex *vertex, @@ -115,8 +114,9 @@ public: PathVertexRep *prevPaths(Vertex *vertex) const; void deletePrevPaths(Vertex *vertex, uint32_t count); - void clearPrevPaths(); - // Private to Search::deletePaths1(Vertex). + // Private to Search::deletePaths(). + void deletePaths(); + // Private to Search::deletePaths(Vertex). void deletePaths(Vertex *vertex, uint32_t count); diff --git a/search/Search.cc b/search/Search.cc index ecfa8fe2..1a358e54 100644 --- a/search/Search.cc +++ b/search/Search.cc @@ -400,14 +400,8 @@ Search::deletePaths() { debugPrint(debug_, "search", 1, "delete paths"); if (arrivals_exist_) { - VertexIterator vertex_iter(graph_); - while (vertex_iter.hasNext()) { - Vertex *vertex = vertex_iter.next(); - deletePaths(vertex); - } + graph_->deletePaths(); filtered_arrivals_->clear(); - graph_->clearArrivals(); - graph_->clearPrevPaths(); arrivals_exist_ = false; } }