diff --git a/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp b/rclcpp_lifecycle/test/test_lifecycle_service_client.cpp index 76978d052f..cc930eb0e0 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 @@ -217,21 +218,31 @@ class TestLifecycleServiceClient : public ::testing::Test 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_; };