From f4d833f1b56dff4a018c2cb00e1421c6e5e9a870 Mon Sep 17 00:00:00 2001 From: James Cherry Date: Sun, 19 Apr 2020 15:23:16 -0700 Subject: [PATCH] vertex arrivals lock --- graph/Graph.cc | 9 +++++++-- include/sta/Graph.hh | 4 ++-- search/PathVertexRep.cc | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/graph/Graph.cc b/graph/Graph.cc index 46833f82..512750f4 100644 --- a/graph/Graph.cc +++ b/graph/Graph.cc @@ -515,9 +515,14 @@ Graph::makeArrivals(Vertex *vertex, } Arrival * -Graph::arrivals(Vertex *vertex) const +Graph::arrivals(Vertex *vertex) { - return arrivals_.pointer(vertex->arrivals()); + Arrival *arrivals; + { + UniqueLock lock(arrivals_lock_); + arrivals = arrivals_.pointer(vertex->arrivals()); + } + return arrivals; } void diff --git a/include/sta/Graph.hh b/include/sta/Graph.hh index 32141e7b..3d989bdb 100644 --- a/include/sta/Graph.hh +++ b/include/sta/Graph.hh @@ -100,7 +100,7 @@ public: VertexId vertexCount() { return vertices_->size(); } Arrival *makeArrivals(Vertex *vertex, uint32_t count); - Arrival *arrivals(Vertex *vertex) const; + Arrival *arrivals(Vertex *vertex); void clearArrivals(); PathVertexRep *makePrevPaths(Vertex *vertex, uint32_t count); @@ -274,7 +274,7 @@ public: bool isRoot() const{ return level_ == 0; } LevelColor color() const { return static_cast(color_); } void setColor(LevelColor color); - ArrivalId arrivals() const { return arrivals_; } + ArrivalId arrivals() { return arrivals_; } void setArrivals(ArrivalId id); PrevPathId prevPaths() const { return prev_paths_; } void setPrevPaths(PrevPathId id); diff --git a/search/PathVertexRep.cc b/search/PathVertexRep.cc index 1411bc01..8b338a70 100644 --- a/search/PathVertexRep.cc +++ b/search/PathVertexRep.cc @@ -132,7 +132,7 @@ PathVertexRep::tag(const StaState *sta) const Arrival PathVertexRep::arrival(const StaState *sta) const { - const Graph *graph = sta->graph(); + Graph *graph = sta->graph(); const Search *search = sta->search(); Tag *tag = search->tag(tag_index_); Vertex *vertex = graph->vertex(vertex_id_);