From e476cd6b8d07da578b643620353655b1b9844c77 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 7 Nov 2024 08:04:26 -0800 Subject: [PATCH 1/2] threads seg fault Signed-off-by: James Cherry --- graph/Graph.cc | 27 +++++++++++++++------------ include/sta/Graph.hh | 6 +++--- search/Search.cc | 8 +------- 3 files changed, 19 insertions(+), 22 deletions(-) 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; } } From 23eccdd4675d6c3952c9ca496860efc7357b1728 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Thu, 7 Nov 2024 08:55:10 -0800 Subject: [PATCH 2/2] leak Signed-off-by: James Cherry --- liberty/LibertyReader.cc | 2 -- util/StringUtil.cc | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/liberty/LibertyReader.cc b/liberty/LibertyReader.cc index 7f039351..da39bca3 100644 --- a/liberty/LibertyReader.cc +++ b/liberty/LibertyReader.cc @@ -651,8 +651,6 @@ LibertyReader::beginLibrary(LibertyGroup *group) library_->units()->currentUnit()->setScale(current_scale_); library_->units()->distanceUnit()->setScale(distance_scale_); - - library_->setDelayModelType(DelayModelType::cmos_linear); scale_factors_ = new ScaleFactors(""); library_->setScaleFactors(scale_factors_); } diff --git a/util/StringUtil.cc b/util/StringUtil.cc index 02c5edfc..a20ac4a8 100644 --- a/util/StringUtil.cc +++ b/util/StringUtil.cc @@ -158,6 +158,7 @@ stringPrintTmp(const char *fmt, if (tmp_length >= tmp_length1) { tmp_length1 = tmp_length + 1; + stringDelete(tmp); tmp = makeTmpString(tmp_length1); va_copy(args_copy, args); tmp_length = vsnprint(tmp, tmp_length1, fmt, args_copy);