From 39d8ed0ba214a6356c4943de122c1f8f6cf39acf Mon Sep 17 00:00:00 2001 From: Antonio cuadros Date: Fri, 16 Jul 2021 13:54:46 +0200 Subject: [PATCH] Add exit to graph manager thread --- .../include/agent/graph_manager/graph_manager.hpp | 12 +++++++++++- .../src/agent/graph_manager/graph_manager.cpp | 7 ++++++- 2 files changed, 17 insertions(+), 2 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 11b2145..1b2d7a4 100644 --- a/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp +++ b/micro_ros_agent/include/agent/graph_manager/graph_manager.hpp @@ -80,7 +80,16 @@ public: /** * @brief Default destructor. */ - ~GraphManager() = default; + ~GraphManager() + { + exit = true; + cv_.notify_one(); + + if (microros_graph_publisher_.joinable()) + { + microros_graph_publisher_.join(); + } + } /** * @brief Implementation of the notification logic that updates the micro-ROS graph. @@ -298,6 +307,7 @@ private: std::string& node_name, std::string& node_namespace); + bool exit = false; eprosima::fastdds::dds::DomainId_t domain_id_; bool graph_changed_; bool display_on_change_; 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 83b2b64..ee761a3 100644 --- a/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp +++ b/micro_ros_agent/src/agent/graph_manager/graph_manager.cpp @@ -137,10 +137,15 @@ inline void GraphManager::publish_microros_graph() std::unique_lock lock(mtx_); cv_.wait(lock, [this]() { - return this->graph_changed_; + return this->graph_changed_ || exit; }); } + if (exit) + { + break; + } + if (display_on_change_) { std::cout << "Updated uros Graph: graph changed" << std::endl;