From d04ec4bf8016cfa1e93b0a3f47ba92a913bcc773 Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 26 Jun 2020 16:00:31 -0700 Subject: [PATCH] fix race in test_lifecycle_service_client (#1204) Signed-off-by: Dirk Thomas --- .../test/test_lifecycle_service_client.cpp | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp b/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp index ce19529..c0c8332 100644 --- a/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp +++ b/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -220,21 +221,31 @@ private: void TearDown() override { - rclcpp::shutdown(); + { + std::lock_guard guard(shutdown_mutex_); + rclcpp::shutdown(); + } spinner_.join(); } void spin() { - while (rclcpp::ok()) { - rclcpp::spin_some(lifecycle_node_->get_node_base_interface()); - rclcpp::spin_some(lifecycle_client_); + while (true) { + { + std::lock_guard guard(shutdown_mutex_); + if (!rclcpp::ok()) { + break; + } + rclcpp::spin_some(lifecycle_node_->get_node_base_interface()); + rclcpp::spin_some(lifecycle_client_); + } std::this_thread::sleep_for(std::chrono::milliseconds(10)); } } std::shared_ptr lifecycle_node_; std::shared_ptr lifecycle_client_; + std::mutex shutdown_mutex_; std::thread spinner_; };