From 0d01f36fda67a217c4df75fef086786c81c886fa Mon Sep 17 00:00:00 2001 From: Max SCHMELLER Date: Tue, 19 Nov 2024 17:42:31 +0900 Subject: [PATCH] fix(hesai): gracefully stop receiver thread on shutdown to prevent SEGFAULT Signed-off-by: Max SCHMELLER --- .../src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp | 5 ++++- nebula_ros/include/nebula_ros/hesai/hesai_ros_wrapper.hpp | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp index 2eeddb71f..8d68c2111 100644 --- a/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp +++ b/nebula_hw_interfaces/src/nebula_hesai_hw_interfaces/hesai_hw_interface.cpp @@ -206,7 +206,10 @@ void HesaiHwInterface::receive_sensor_packet_callback(const std::vector Status HesaiHwInterface::sensor_interface_stop() { - return Status::ERROR_1; + if (udp_socket_) { + udp_socket_->unsubscribe(); + } + return Status::OK; } Status HesaiHwInterface::get_sensor_configuration( diff --git a/nebula_ros/include/nebula_ros/hesai/hesai_ros_wrapper.hpp b/nebula_ros/include/nebula_ros/hesai/hesai_ros_wrapper.hpp index 0da2e8051..1f1186e9d 100644 --- a/nebula_ros/include/nebula_ros/hesai/hesai_ros_wrapper.hpp +++ b/nebula_ros/include/nebula_ros/hesai/hesai_ros_wrapper.hpp @@ -50,7 +50,11 @@ class HesaiRosWrapper final : public rclcpp::Node public: explicit HesaiRosWrapper(const rclcpp::NodeOptions & options); - ~HesaiRosWrapper() noexcept override = default; + ~HesaiRosWrapper() noexcept override + { + if (!hw_interface_wrapper_) return; + hw_interface_wrapper_->hw_interface()->SensorInterfaceStop(); + }; /// @brief Get current status of this driver /// @return Current status