From 7406bdcc2e563202837bf95e65abcf963a898a97 Mon Sep 17 00:00:00 2001 From: Sai Kishor Kothakota Date: Fri, 7 Feb 2025 10:45:53 +0100 Subject: [PATCH] Fix memory leak in the ros2_control (#2033) --- .../include/hardware_interface/actuator.hpp | 4 ++-- .../hardware_interface/actuator_interface.hpp | 4 ++-- .../include/hardware_interface/hardware_info.hpp | 6 +++--- .../include/hardware_interface/sensor.hpp | 4 ++-- .../hardware_interface/sensor_interface.hpp | 4 ++-- .../include/hardware_interface/system.hpp | 4 ++-- .../hardware_interface/system_interface.hpp | 4 ++-- hardware_interface/src/actuator.cpp | 4 ++-- hardware_interface/src/sensor.cpp | 4 ++-- hardware_interface/src/system.cpp | 4 ++-- .../test/test_component_interfaces.cpp | 16 ---------------- .../test_component_interfaces_custom_export.cpp | 6 ------ .../test/test_resource_manager.cpp | 2 -- 13 files changed, 21 insertions(+), 45 deletions(-) diff --git a/hardware_interface/include/hardware_interface/actuator.hpp b/hardware_interface/include/hardware_interface/actuator.hpp index e5c23a68d3..aab829089a 100644 --- a/hardware_interface/include/hardware_interface/actuator.hpp +++ b/hardware_interface/include/hardware_interface/actuator.hpp @@ -72,9 +72,9 @@ class Actuator final const std::vector & start_interfaces, const std::vector & stop_interfaces); - std::string get_name() const; + const std::string & get_name() const; - std::string get_group_name() const; + const std::string & get_group_name() const; const rclcpp_lifecycle::State & get_lifecycle_state() const; diff --git a/hardware_interface/include/hardware_interface/actuator_interface.hpp b/hardware_interface/include/hardware_interface/actuator_interface.hpp index 6f4dfa4402..87b5202734 100644 --- a/hardware_interface/include/hardware_interface/actuator_interface.hpp +++ b/hardware_interface/include/hardware_interface/actuator_interface.hpp @@ -461,13 +461,13 @@ class ActuatorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNod /** * \return name. */ - virtual std::string get_name() const { return info_.name; } + const std::string & get_name() const { return info_.name; } /// Get name of the actuator hardware group to which it belongs to. /** * \return group name. */ - virtual std::string get_group_name() const { return info_.group; } + const std::string & get_group_name() const { return info_.group; } /// Get life-cycle state of the actuator hardware. /** diff --git a/hardware_interface/include/hardware_interface/hardware_info.hpp b/hardware_interface/include/hardware_interface/hardware_info.hpp index 9d96190954..6349baeb53 100644 --- a/hardware_interface/include/hardware_interface/hardware_info.hpp +++ b/hardware_interface/include/hardware_interface/hardware_info.hpp @@ -158,11 +158,11 @@ struct InterfaceDescription */ std::string interface_name; - std::string get_prefix_name() const { return prefix_name; } + const std::string & get_prefix_name() const { return prefix_name; } - std::string get_interface_name() const { return interface_info.name; } + const std::string & get_interface_name() const { return interface_info.name; } - std::string get_name() const { return interface_name; } + const std::string & get_name() const { return interface_name; } }; /// This structure stores information about hardware defined in a robot's URDF. diff --git a/hardware_interface/include/hardware_interface/sensor.hpp b/hardware_interface/include/hardware_interface/sensor.hpp index 26e99f032a..e47e34c0d7 100644 --- a/hardware_interface/include/hardware_interface/sensor.hpp +++ b/hardware_interface/include/hardware_interface/sensor.hpp @@ -62,9 +62,9 @@ class Sensor final std::vector export_state_interfaces(); - std::string get_name() const; + const std::string & get_name() const; - std::string get_group_name() const; + const std::string & get_group_name() const; const rclcpp_lifecycle::State & get_lifecycle_state() const; diff --git a/hardware_interface/include/hardware_interface/sensor_interface.hpp b/hardware_interface/include/hardware_interface/sensor_interface.hpp index 93de2a6494..c99138fc11 100644 --- a/hardware_interface/include/hardware_interface/sensor_interface.hpp +++ b/hardware_interface/include/hardware_interface/sensor_interface.hpp @@ -275,13 +275,13 @@ class SensorInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI /** * \return name. */ - virtual std::string get_name() const { return info_.name; } + const std::string & get_name() const { return info_.name; } /// Get name of the actuator hardware group to which it belongs to. /** * \return group name. */ - virtual std::string get_group_name() const { return info_.group; } + const std::string & get_group_name() const { return info_.group; } /// Get life-cycle state of the actuator hardware. /** diff --git a/hardware_interface/include/hardware_interface/system.hpp b/hardware_interface/include/hardware_interface/system.hpp index fc482d8106..750cbb301a 100644 --- a/hardware_interface/include/hardware_interface/system.hpp +++ b/hardware_interface/include/hardware_interface/system.hpp @@ -72,9 +72,9 @@ class System final const std::vector & start_interfaces, const std::vector & stop_interfaces); - std::string get_name() const; + const std::string & get_name() const; - std::string get_group_name() const; + const std::string & get_group_name() const; const rclcpp_lifecycle::State & get_lifecycle_state() const; diff --git a/hardware_interface/include/hardware_interface/system_interface.hpp b/hardware_interface/include/hardware_interface/system_interface.hpp index e145deae5b..4337f5fd19 100644 --- a/hardware_interface/include/hardware_interface/system_interface.hpp +++ b/hardware_interface/include/hardware_interface/system_interface.hpp @@ -490,13 +490,13 @@ class SystemInterface : public rclcpp_lifecycle::node_interfaces::LifecycleNodeI /** * \return name. */ - virtual std::string get_name() const { return info_.name; } + const std::string & get_name() const { return info_.name; } /// Get name of the actuator hardware group to which it belongs to. /** * \return group name. */ - virtual std::string get_group_name() const { return info_.group; } + const std::string & get_group_name() const { return info_.group; } /// Get life-cycle state of the actuator hardware. /** diff --git a/hardware_interface/src/actuator.cpp b/hardware_interface/src/actuator.cpp index 81bebf1182..790898cfed 100644 --- a/hardware_interface/src/actuator.cpp +++ b/hardware_interface/src/actuator.cpp @@ -277,9 +277,9 @@ return_type Actuator::perform_command_mode_switch( return impl_->perform_command_mode_switch(start_interfaces, stop_interfaces); } -std::string Actuator::get_name() const { return impl_->get_name(); } +const std::string & Actuator::get_name() const { return impl_->get_name(); } -std::string Actuator::get_group_name() const { return impl_->get_group_name(); } +const std::string & Actuator::get_group_name() const { return impl_->get_group_name(); } const rclcpp_lifecycle::State & Actuator::get_lifecycle_state() const { diff --git a/hardware_interface/src/sensor.cpp b/hardware_interface/src/sensor.cpp index ae4d930bbe..0ef4da36d4 100644 --- a/hardware_interface/src/sensor.cpp +++ b/hardware_interface/src/sensor.cpp @@ -233,9 +233,9 @@ std::vector Sensor::export_state_interfaces() // END: for backward compatibility } -std::string Sensor::get_name() const { return impl_->get_name(); } +const std::string & Sensor::get_name() const { return impl_->get_name(); } -std::string Sensor::get_group_name() const { return impl_->get_group_name(); } +const std::string & Sensor::get_group_name() const { return impl_->get_group_name(); } const rclcpp_lifecycle::State & Sensor::get_lifecycle_state() const { diff --git a/hardware_interface/src/system.cpp b/hardware_interface/src/system.cpp index 89d6afd42e..694e45f2f3 100644 --- a/hardware_interface/src/system.cpp +++ b/hardware_interface/src/system.cpp @@ -275,9 +275,9 @@ return_type System::perform_command_mode_switch( return impl_->perform_command_mode_switch(start_interfaces, stop_interfaces); } -std::string System::get_name() const { return impl_->get_name(); } +const std::string & System::get_name() const { return impl_->get_name(); } -std::string System::get_group_name() const { return impl_->get_group_name(); } +const std::string & System::get_group_name() const { return impl_->get_group_name(); } const rclcpp_lifecycle::State & System::get_lifecycle_state() const { diff --git a/hardware_interface/test/test_component_interfaces.cpp b/hardware_interface/test/test_component_interfaces.cpp index 28a74aeb66..06ef8a0e42 100644 --- a/hardware_interface/test/test_component_interfaces.cpp +++ b/hardware_interface/test/test_component_interfaces.cpp @@ -101,8 +101,6 @@ class DummyActuator : public hardware_interface::ActuatorInterface return command_interfaces; } - std::string get_name() const override { return "DummyActuator"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -193,8 +191,6 @@ class DummyActuatorDefault : public hardware_interface::ActuatorInterface return CallbackReturn::SUCCESS; } - std::string get_name() const override { return "DummyActuatorDefault"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -276,8 +272,6 @@ class DummySensor : public hardware_interface::SensorInterface return state_interfaces; } - std::string get_name() const override { return "DummySensor"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -337,8 +331,6 @@ class DummySensorDefault : public hardware_interface::SensorInterface return CallbackReturn::SUCCESS; } - std::string get_name() const override { return "DummySensorDefault"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -397,8 +389,6 @@ class DummySensorJointDefault : public hardware_interface::SensorInterface return CallbackReturn::SUCCESS; } - std::string get_name() const override { return "DummySensorJointDefault"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -502,8 +492,6 @@ class DummySystem : public hardware_interface::SystemInterface return command_interfaces; } - std::string get_name() const override { return "DummySystem"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -608,8 +596,6 @@ class DummySystemDefault : public hardware_interface::SystemInterface return CallbackReturn::SUCCESS; } - std::string get_name() const override { return "DummySystemDefault"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { @@ -687,8 +673,6 @@ class DummySystemPreparePerform : public hardware_interface::SystemInterface return CallbackReturn::SUCCESS; } - std::string get_name() const override { return "DummySystemPreparePerform"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override { diff --git a/hardware_interface/test/test_component_interfaces_custom_export.cpp b/hardware_interface/test/test_component_interfaces_custom_export.cpp index 62e2b703cf..7335f9420a 100644 --- a/hardware_interface/test/test_component_interfaces_custom_export.cpp +++ b/hardware_interface/test/test_component_interfaces_custom_export.cpp @@ -54,8 +54,6 @@ using CallbackReturn = rclcpp_lifecycle::node_interfaces::LifecycleNodeInterface class DummyActuatorDefault : public hardware_interface::ActuatorInterface { - std::string get_name() const override { return "DummyActuatorDefault"; } - std::vector export_unlisted_state_interface_descriptions() override { @@ -95,8 +93,6 @@ class DummyActuatorDefault : public hardware_interface::ActuatorInterface class DummySensorDefault : public hardware_interface::SensorInterface { - std::string get_name() const override { return "DummySensorDefault"; } - std::vector export_unlisted_state_interface_descriptions() override { @@ -118,8 +114,6 @@ class DummySensorDefault : public hardware_interface::SensorInterface class DummySystemDefault : public hardware_interface::SystemInterface { - std::string get_name() const override { return "DummySystemDefault"; } - std::vector export_unlisted_state_interface_descriptions() override { diff --git a/hardware_interface_testing/test/test_resource_manager.cpp b/hardware_interface_testing/test/test_resource_manager.cpp index be9e672b3b..65735e23f7 100644 --- a/hardware_interface_testing/test/test_resource_manager.cpp +++ b/hardware_interface_testing/test/test_resource_manager.cpp @@ -371,8 +371,6 @@ class ExternalComponent : public hardware_interface::ActuatorInterface return command_interfaces; } - std::string get_name() const override { return "ExternalComponent"; } - hardware_interface::return_type read( const rclcpp::Time & /*time*/, const rclcpp::Duration & /*period*/) override {