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); vertex->setRequireds(arrival_null);
} }
void
Graph::clearArrivals()
{
arrivals_.clear();
requireds_.clear();
}
PathVertexRep * PathVertexRep *
Graph::makePrevPaths(Vertex *vertex, Graph::makePrevPaths(Vertex *vertex,
uint32_t count) uint32_t count)
@ -674,19 +667,32 @@ Graph::deletePrevPaths(Vertex *vertex,
} }
void void
Graph::clearPrevPaths() Graph::deletePaths()
{ {
arrivals_.clear();
requireds_.clear();
prev_paths_.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 void
Graph::deletePaths(Vertex *vertex, Graph::deletePaths(Vertex *vertex,
uint32_t count) uint32_t count)
{ {
if (vertex->arrivals() != arrival_null) { if (vertex->arrivals() != arrival_null) {
LockGuard lock(arrivals_lock_);
arrivals_.destroy(vertex->arrivals(), count); arrivals_.destroy(vertex->arrivals(), count);
vertex->setArrivals(arrival_null); vertex->setArrivals(arrival_null);
vertex->tag_group_index_ = tag_group_index_max;
vertex->crpr_path_pruning_disabled_ = false;
} }
if (vertex->requireds() != arrival_null) { if (vertex->requireds() != arrival_null) {
requireds_.destroy(vertex->requireds(), count); requireds_.destroy(vertex->requireds(), count);
@ -697,9 +703,6 @@ Graph::deletePaths(Vertex *vertex,
prev_paths_.destroy(vertex->prevPaths(), count); prev_paths_.destroy(vertex->prevPaths(), count);
vertex->setPrevPaths(object_id_null); 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); Required *requireds(Vertex *vertex);
void deleteRequireds(Vertex *vertex, void deleteRequireds(Vertex *vertex,
uint32_t count); uint32_t count);
void clearArrivals();
size_t arrivalCount() const { return arrivals_.size(); } size_t arrivalCount() const { return arrivals_.size(); }
size_t requiredCount() const { return requireds_.size(); } size_t requiredCount() const { return requireds_.size(); }
PathVertexRep *makePrevPaths(Vertex *vertex, PathVertexRep *makePrevPaths(Vertex *vertex,
@ -115,8 +114,9 @@ public:
PathVertexRep *prevPaths(Vertex *vertex) const; PathVertexRep *prevPaths(Vertex *vertex) const;
void deletePrevPaths(Vertex *vertex, void deletePrevPaths(Vertex *vertex,
uint32_t count); uint32_t count);
void clearPrevPaths(); // Private to Search::deletePaths().
// Private to Search::deletePaths1(Vertex). void deletePaths();
// Private to Search::deletePaths(Vertex).
void deletePaths(Vertex *vertex, void deletePaths(Vertex *vertex,
uint32_t count); uint32_t count);

View File

@ -400,14 +400,8 @@ Search::deletePaths()
{ {
debugPrint(debug_, "search", 1, "delete paths"); debugPrint(debug_, "search", 1, "delete paths");
if (arrivals_exist_) { if (arrivals_exist_) {
VertexIterator vertex_iter(graph_); graph_->deletePaths();
while (vertex_iter.hasNext()) {
Vertex *vertex = vertex_iter.next();
deletePaths(vertex);
}
filtered_arrivals_->clear(); filtered_arrivals_->clear();
graph_->clearArrivals();
graph_->clearPrevPaths();
arrivals_exist_ = false; arrivals_exist_ = false;
} }
} }