From eb13e5fa2642c978cb4b410192e30b1184b8b742 Mon Sep 17 00:00:00 2001 From: Joshua Hampp Date: Thu, 15 Apr 2021 09:00:51 +0200 Subject: [PATCH 1/2] added lock to prevent simultaneous access of on_shutdown_callbacks_ which led to a race condition (seg fault) when creating multiple executors (multithreaded) Signed-off-by: Joshua Hampp Signed-off-by: Joshua Hampp --- rclcpp/src/rclcpp/context.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rclcpp/src/rclcpp/context.cpp b/rclcpp/src/rclcpp/context.cpp index 90ea3db908..7e4c28da1c 100644 --- a/rclcpp/src/rclcpp/context.cpp +++ b/rclcpp/src/rclcpp/context.cpp @@ -344,6 +344,7 @@ Context::shutdown(const std::string & reason) rclcpp::Context::OnShutdownCallback Context::on_shutdown(OnShutdownCallback callback) { + std::lock_guard lock(on_shutdown_callbacks_mutex_); on_shutdown_callbacks_.push_back(callback); return callback; } From ce7ded4dfed37cc2f7e3dfaa2d4592b4f4b9021b Mon Sep 17 00:00:00 2001 From: Joshua Hampp Date: Wed, 28 Apr 2021 09:37:42 +0200 Subject: [PATCH 2/2] added sleep in test before checking result Signed-off-by: Joshua Hampp Signed-off-by: Joshua Hampp --- rclcpp/test/rclcpp/test_node.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/rclcpp/test/rclcpp/test_node.cpp b/rclcpp/test/rclcpp/test_node.cpp index e1fb4b8ced..8fce27e74d 100644 --- a/rclcpp/test/rclcpp/test_node.cpp +++ b/rclcpp/test/rclcpp/test_node.cpp @@ -2556,6 +2556,7 @@ TEST_F(TestNode, get_publishers_subscriptions_info_by_topic) { }; rclcpp::QoS qos = rclcpp::QoS(qos_initialization, rmw_qos_profile_default); auto publisher = node->create_publisher(topic_name, qos); + std::this_thread::sleep_for(std::chrono::milliseconds(30)); // List should have one item auto publisher_list = node->get_publishers_info_by_topic(fq_topic_name); ASSERT_EQ(publisher_list.size(), (size_t)1);