fix race in test_lifecycle_service_client (#1204)

Signed-off-by: Dirk Thomas <dirk-thomas@users.noreply.github.com>
This commit is contained in:
Dirk Thomas 2020-06-26 16:00:31 -07:00 committed by Alejandro Hernández Cordero
parent e920175dae
commit d04ec4bf80

View file

@ -20,6 +20,7 @@
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include <chrono> #include <chrono>
#include <memory> #include <memory>
#include <mutex>
#include <string> #include <string>
#include <thread> #include <thread>
#include <vector> #include <vector>
@ -220,21 +221,31 @@ private:
void TearDown() override void TearDown() override
{ {
rclcpp::shutdown(); {
std::lock_guard<std::mutex> guard(shutdown_mutex_);
rclcpp::shutdown();
}
spinner_.join(); spinner_.join();
} }
void spin() void spin()
{ {
while (rclcpp::ok()) { while (true) {
rclcpp::spin_some(lifecycle_node_->get_node_base_interface()); {
rclcpp::spin_some(lifecycle_client_); std::lock_guard<std::mutex> 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::this_thread::sleep_for(std::chrono::milliseconds(10));
} }
} }
std::shared_ptr<EmptyLifecycleNode> lifecycle_node_; std::shared_ptr<EmptyLifecycleNode> lifecycle_node_;
std::shared_ptr<LifecycleServiceClient> lifecycle_client_; std::shared_ptr<LifecycleServiceClient> lifecycle_client_;
std::mutex shutdown_mutex_;
std::thread spinner_; std::thread spinner_;
}; };