diff --git a/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.cpp b/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.cpp index a1af42a0..af7c5605 100644 --- a/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.cpp +++ b/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.cpp @@ -54,7 +54,7 @@ void rmw_context_impl_s::graph_sub_data_handler(const z_sample_t * sample, void } // Update the graph cache. - std::lock_guard lock(data_ptr->mutex_); + std::lock_guard lock(data_ptr->mutex_); if (data_ptr->is_shutdown_) { return; } @@ -108,7 +108,7 @@ rmw_context_impl_s::Data::Data( ///============================================================================= rmw_ret_t rmw_context_impl_s::Data::subscribe_to_ros_graph() { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); if (is_initialized_) { return RMW_RET_OK; } @@ -150,7 +150,7 @@ rmw_ret_t rmw_context_impl_s::Data::subscribe_to_ros_graph() ///============================================================================= rmw_ret_t rmw_context_impl_s::Data::shutdown() { - std::lock_guard lock(mutex_); + std::lock_guard lock(mutex_); if (is_shutdown_) { return RMW_RET_OK; } @@ -386,35 +386,35 @@ rmw_context_impl_s::rmw_context_impl_s( ///============================================================================= std::string rmw_context_impl_s::enclave() const { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->enclave_; } ///============================================================================= z_session_t rmw_context_impl_s::session() const { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return z_loan(data_->session_); } ///============================================================================= std::optional & rmw_context_impl_s::shm_manager() { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->shm_manager_; } ///============================================================================= rmw_guard_condition_t * rmw_context_impl_s::graph_guard_condition() { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->graph_guard_condition_; } ///============================================================================= std::size_t rmw_context_impl_s::get_next_entity_id() { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->next_entity_id_++; } @@ -427,21 +427,21 @@ rmw_ret_t rmw_context_impl_s::shutdown() ///============================================================================= bool rmw_context_impl_s::is_shutdown() const { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->is_shutdown_; } ///============================================================================= bool rmw_context_impl_s::session_is_valid() const { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return z_check(data_->session_); } ///============================================================================= std::shared_ptr rmw_context_impl_s::graph_cache() { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); return data_->graph_cache_; } @@ -451,7 +451,7 @@ bool rmw_context_impl_s::create_node_data( const std::string & ns, const std::string & node_name) { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); auto node_insertion = data_->nodes_.insert(std::make_pair(node, nullptr)); if (!node_insertion.second) { // Node already exists. @@ -464,7 +464,7 @@ bool rmw_context_impl_s::create_node_data( // Create the entity. z_session_t session = z_loan(data_->session_); - const size_t node_id = this->data_->next_entity_id_++; + const size_t node_id = this->get_next_entity_id(); auto entity = rmw_zenoh_cpp::liveliness::Entity::make( z_info_zid(session), std::to_string(node_id), @@ -475,7 +475,7 @@ bool rmw_context_impl_s::create_node_data( ns, node_name, data_->enclave_ - } + } ); if (entity == nullptr) { RMW_ZENOH_LOG_ERROR_NAMED( @@ -515,7 +515,7 @@ bool rmw_context_impl_s::create_node_data( std::shared_ptr rmw_context_impl_s::get_node_data( const rmw_node_t * const node) { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); auto node_it = data_->nodes_.find(node); if (node_it == data_->nodes_.end()) { return nullptr; @@ -526,6 +526,6 @@ std::shared_ptr rmw_context_impl_s::get_node_data( ///============================================================================= void rmw_context_impl_s::delete_node_data(const rmw_node_t * const node) { - std::lock_guard lock(data_->mutex_); + std::lock_guard lock(data_->mutex_); data_->nodes_.erase(node); } diff --git a/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.hpp b/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.hpp index 4d3acb86..1bb26565 100644 --- a/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.hpp +++ b/rmw_zenoh_cpp/src/detail/rmw_context_impl_s.hpp @@ -31,7 +31,7 @@ #include "rmw/rmw.h" ///============================================================================= -class rmw_context_impl_s +class rmw_context_impl_s final { public: // Constructor that internally initializes the Zenoh session and other artifacts. @@ -119,7 +119,7 @@ class rmw_context_impl_s ~Data(); // Mutex to lock when accessing members. - mutable std::mutex mutex_; + mutable std::recursive_mutex mutex_; // RMW allocator. const rcutils_allocator_t * allocator_; // Enclave, name used to find security artifacts in a sros2 keystore. diff --git a/rmw_zenoh_cpp/src/detail/rmw_node_data.hpp b/rmw_zenoh_cpp/src/detail/rmw_node_data.hpp index f4c7f56d..fde2840a 100644 --- a/rmw_zenoh_cpp/src/detail/rmw_node_data.hpp +++ b/rmw_zenoh_cpp/src/detail/rmw_node_data.hpp @@ -19,7 +19,6 @@ #include #include -#include #include "liveliness_utils.hpp" @@ -27,7 +26,7 @@ namespace rmw_zenoh_cpp { ///============================================================================= // The NodeData can only be created via rmw_context_impl_s::create_node_data(). -class NodeData +class NodeData final { public: // Constructor.