From af0b1e6b0770561c2f4c08ee72e9323e0459db60 Mon Sep 17 00:00:00 2001 From: Brian Gerkey Date: Mon, 6 Jun 2016 16:20:51 -0700 Subject: [PATCH] Add mutex to protect vectors of pointers in callbackgroup --- rclcpp/include/rclcpp/callback_group.hpp | 3 +++ rclcpp/src/rclcpp/callback_group.cpp | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/rclcpp/include/rclcpp/callback_group.hpp b/rclcpp/include/rclcpp/callback_group.hpp index 47ea417..af90476 100644 --- a/rclcpp/include/rclcpp/callback_group.hpp +++ b/rclcpp/include/rclcpp/callback_group.hpp @@ -16,6 +16,7 @@ #define RCLCPP__CALLBACK_GROUP_HPP_ #include +#include #include #include @@ -97,6 +98,8 @@ private: add_client(const rclcpp::client::ClientBase::SharedPtr client_ptr); CallbackGroupType type_; + // Mutex to protect the subsequent vectors of pointers. + mutable std::mutex mutex_; std::vector subscription_ptrs_; std::vector timer_ptrs_; std::vector service_ptrs_; diff --git a/rclcpp/src/rclcpp/callback_group.cpp b/rclcpp/src/rclcpp/callback_group.cpp index 6d728a6..40168e5 100644 --- a/rclcpp/src/rclcpp/callback_group.cpp +++ b/rclcpp/src/rclcpp/callback_group.cpp @@ -26,24 +26,28 @@ CallbackGroup::CallbackGroup(CallbackGroupType group_type) const std::vector & CallbackGroup::get_subscription_ptrs() const { + std::lock_guard lock(mutex_); return subscription_ptrs_; } const std::vector & CallbackGroup::get_timer_ptrs() const { + std::lock_guard lock(mutex_); return timer_ptrs_; } const std::vector & CallbackGroup::get_service_ptrs() const { + std::lock_guard lock(mutex_); return service_ptrs_; } const std::vector & CallbackGroup::get_client_ptrs() const { + std::lock_guard lock(mutex_); return client_ptrs_; } @@ -63,23 +67,27 @@ void CallbackGroup::add_subscription( const rclcpp::subscription::SubscriptionBase::SharedPtr subscription_ptr) { + std::lock_guard lock(mutex_); subscription_ptrs_.push_back(subscription_ptr); } void CallbackGroup::add_timer(const rclcpp::timer::TimerBase::SharedPtr timer_ptr) { + std::lock_guard lock(mutex_); timer_ptrs_.push_back(timer_ptr); } void CallbackGroup::add_service(const rclcpp::service::ServiceBase::SharedPtr service_ptr) { + std::lock_guard lock(mutex_); service_ptrs_.push_back(service_ptr); } void CallbackGroup::add_client(const rclcpp::client::ClientBase::SharedPtr client_ptr) { + std::lock_guard lock(mutex_); client_ptrs_.push_back(client_ptr); }