threads seg fault

Signed-off-by: James Cherry <cherry@parallaxsw.com>
This commit is contained in:
James Cherry 2024-11-07 08:04:26 -08:00
parent 9f0997ef6f
commit e476cd6b8d
3 changed files with 19 additions and 22 deletions

View File

@ -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;
}
////////////////////////////////////////////////////////////////

View File

@ -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);

View File

@ -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;
}
}