From f85b530cb16a398496f11979067125a60d2dcf88 Mon Sep 17 00:00:00 2001 From: Pablo Garrido Date: Tue, 23 Aug 2022 12:42:03 +0200 Subject: [PATCH] Fix Datawriter destruction (#169) Signed-off-by: Pablo Garrido Signed-off-by: Pablo Garrido (cherry picked from commit 4f686e8dc1e38cf2317055249c763b238a85f5c5) --- .../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 fb424b1..4c5377b 100644 --- a/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp +++ b/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp @@ -335,7 +335,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 cc30bab..9ec5670 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(