From 8bff100767be19d567e0becccdf3fb8904f840c1 Mon Sep 17 00:00:00 2001 From: Pablo Garrido Date: Tue, 23 Aug 2022 12:35:16 +0200 Subject: [PATCH] Fix Datawriter destruction Signed-off-by: Pablo Garrido --- .../include/agent/graph_manager/graph_manager.hpp | 2 +- micro_ros_agent/src/agent/graph_manager/graph_manager.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp b/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp index c113a96..d6df8d0 100644 --- a/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp +++ b/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp @@ -305,7 +305,7 @@ class GraphManager // Store a auxiliary publishers and datawriter for each participant created in micro-ROS std::map< const eprosima::fastdds::dds::DomainParticipant*, - std::unique_ptr + eprosima::fastdds::dds::DataWriter* > micro_ros_graph_datawriters_; }; diff --git a/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp b/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp index 3338c97..5c9e9df 100644 --- a/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp +++ b/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp @@ -322,11 +322,10 @@ void GraphManager::add_participant( if (it == micro_ros_graph_datawriters_.end()) { // Create datawriter - std::unique_ptr datawriter; - datawriter.reset(publisher_->create_datawriter(ros_discovery_topic_.get(), datawriter_qos_)); + eprosima::fastdds::dds::DataWriter * datawriter = publisher_->create_datawriter(ros_discovery_topic_.get(), datawriter_qos_); it = micro_ros_graph_datawriters_.insert( - std::make_pair(participant, std::move(datawriter))).first; + std::make_pair(participant, datawriter)).first; } it->second->write(static_cast(&info)); @@ -346,8 +345,9 @@ void GraphManager::remove_participant( rmw_dds_common::convert_gid_to_msg(&gid, &info.gid); auto it = micro_ros_graph_datawriters_.find(participant); it->second->write(static_cast(&info)); + publisher_->delete_datawriter(it->second); + micro_ros_graph_datawriters_.erase(participant); } - micro_ros_graph_datawriters_.erase(participant); } void GraphManager::add_datawriter(