Fix locking while modifying counter (#1454)

Clang with thread safety does not compile because
num_nodes_since_last_loop_closure_
is modified without holding a mutex.
This fixes it.
master
gaschler 2018-10-25 15:30:06 +02:00 committed by GitHub
parent 5253186cbe
commit f060815a7f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 8 additions and 2 deletions

View File

@ -377,6 +377,7 @@ WorkItem::Result PoseGraph2D::ComputeConstraintsForNode(
}
}
constraint_builder_.NotifyEndOfNode();
absl::MutexLock locker(&mutex_);
++num_nodes_since_last_loop_closure_;
if (options_.optimize_every_n_nodes() > 0 &&
num_nodes_since_last_loop_closure_ > options_.optimize_every_n_nodes()) {
@ -997,6 +998,7 @@ transform::Rigid3d PoseGraph2D::GetLocalToGlobalTransform(
}
std::vector<std::vector<int>> PoseGraph2D::GetConnectedTrajectories() const {
absl::MutexLock locker(&mutex_);
return data_.trajectory_connectivity_state.Components();
}

View File

@ -114,7 +114,8 @@ class PoseGraph2D : public PoseGraph {
const std::vector<Constraint>& constraints) override;
void AddTrimmer(std::unique_ptr<PoseGraphTrimmer> trimmer) override;
void RunFinalOptimization() override;
std::vector<std::vector<int>> GetConnectedTrajectories() const override;
std::vector<std::vector<int>> GetConnectedTrajectories() const override
LOCKS_EXCLUDED(mutex_);
PoseGraphInterface::SubmapData GetSubmapData(const SubmapId& submap_id) const
LOCKS_EXCLUDED(mutex_) override;
MapById<SubmapId, PoseGraphInterface::SubmapData> GetAllSubmapData() const

View File

@ -371,6 +371,7 @@ WorkItem::Result PoseGraph3D::ComputeConstraintsForNode(
}
}
constraint_builder_.NotifyEndOfNode();
absl::MutexLock locker(&mutex_);
++num_nodes_since_last_loop_closure_;
if (options_.optimize_every_n_nodes() > 0 &&
num_nodes_since_last_loop_closure_ > options_.optimize_every_n_nodes()) {
@ -1005,6 +1006,7 @@ transform::Rigid3d PoseGraph3D::GetLocalToGlobalTransform(
}
std::vector<std::vector<int>> PoseGraph3D::GetConnectedTrajectories() const {
absl::MutexLock locker(&mutex_);
return data_.trajectory_connectivity_state.Components();
}

View File

@ -112,7 +112,8 @@ class PoseGraph3D : public PoseGraph {
const std::vector<Constraint>& constraints) override;
void AddTrimmer(std::unique_ptr<PoseGraphTrimmer> trimmer) override;
void RunFinalOptimization() override;
std::vector<std::vector<int>> GetConnectedTrajectories() const override;
std::vector<std::vector<int>> GetConnectedTrajectories() const override
LOCKS_EXCLUDED(mutex_);
PoseGraph::SubmapData GetSubmapData(const SubmapId& submap_id) const
LOCKS_EXCLUDED(mutex_) override;
MapById<SubmapId, SubmapData> GetAllSubmapData() const