Skip to content

Commit

Permalink
Switch to recursive_mutex in rmw_context_impl_s
Browse files Browse the repository at this point in the history
Signed-off-by: Yadunund <[email protected]>
  • Loading branch information
Yadunund committed Sep 6, 2024
1 parent b0c9faa commit 3fd565b
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 20 deletions.
32 changes: 16 additions & 16 deletions rmw_zenoh_cpp/src/detail/rmw_context_impl_s.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::mutex> lock(data_ptr->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_ptr->mutex_);
if (data_ptr->is_shutdown_) {
return;
}
Expand Down Expand Up @@ -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<std::mutex> lock(mutex_);
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (is_initialized_) {
return RMW_RET_OK;
}
Expand Down Expand Up @@ -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<std::mutex> lock(mutex_);
std::lock_guard<std::recursive_mutex> lock(mutex_);
if (is_shutdown_) {
return RMW_RET_OK;
}
Expand Down Expand Up @@ -386,35 +386,35 @@ rmw_context_impl_s::rmw_context_impl_s(
///=============================================================================
std::string rmw_context_impl_s::enclave() const
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->enclave_;
}

///=============================================================================
z_session_t rmw_context_impl_s::session() const
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return z_loan(data_->session_);
}

///=============================================================================
std::optional<zc_owned_shm_manager_t> & rmw_context_impl_s::shm_manager()
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->shm_manager_;
}

///=============================================================================
rmw_guard_condition_t * rmw_context_impl_s::graph_guard_condition()
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->graph_guard_condition_;
}

///=============================================================================
std::size_t rmw_context_impl_s::get_next_entity_id()
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->next_entity_id_++;
}

Expand All @@ -427,21 +427,21 @@ rmw_ret_t rmw_context_impl_s::shutdown()
///=============================================================================
bool rmw_context_impl_s::is_shutdown() const
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->is_shutdown_;
}

///=============================================================================
bool rmw_context_impl_s::session_is_valid() const
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return z_check(data_->session_);
}

///=============================================================================
std::shared_ptr<rmw_zenoh_cpp::GraphCache> rmw_context_impl_s::graph_cache()
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
return data_->graph_cache_;
}

Expand All @@ -451,7 +451,7 @@ bool rmw_context_impl_s::create_node_data(
const std::string & ns,
const std::string & node_name)
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
auto node_insertion = data_->nodes_.insert(std::make_pair(node, nullptr));
if (!node_insertion.second) {
// Node already exists.
Expand All @@ -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),
Expand All @@ -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(
Expand Down Expand Up @@ -515,7 +515,7 @@ bool rmw_context_impl_s::create_node_data(
std::shared_ptr<rmw_zenoh_cpp::NodeData> rmw_context_impl_s::get_node_data(
const rmw_node_t * const node)
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
auto node_it = data_->nodes_.find(node);
if (node_it == data_->nodes_.end()) {
return nullptr;
Expand All @@ -526,6 +526,6 @@ std::shared_ptr<rmw_zenoh_cpp::NodeData> rmw_context_impl_s::get_node_data(
///=============================================================================
void rmw_context_impl_s::delete_node_data(const rmw_node_t * const node)
{
std::lock_guard<std::mutex> lock(data_->mutex_);
std::lock_guard<std::recursive_mutex> lock(data_->mutex_);
data_->nodes_.erase(node);
}
4 changes: 2 additions & 2 deletions rmw_zenoh_cpp/src/detail/rmw_context_impl_s.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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.
Expand Down
3 changes: 1 addition & 2 deletions rmw_zenoh_cpp/src/detail/rmw_node_data.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -19,15 +19,14 @@

#include <memory>
#include <mutex>
#include <string>

#include "liveliness_utils.hpp"

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.
Expand Down

0 comments on commit 3fd565b

Please sign in to comment.