From 72c05ecee023b73f8bd687349c879d1d86df9f9e Mon Sep 17 00:00:00 2001 From: Christophe Bedard Date: Tue, 28 Feb 2023 14:42:39 -0800 Subject: [PATCH] Fix memory leak in tracetools::get_symbol() (#2104) Signed-off-by: Christophe Bedard --- rclcpp/include/rclcpp/any_service_callback.hpp | 12 ++++++++---- .../include/rclcpp/any_subscription_callback.hpp | 12 ++++++++---- rclcpp/include/rclcpp/timer.hpp | 14 ++++++++++---- 3 files changed, 26 insertions(+), 12 deletions(-) diff --git a/rclcpp/include/rclcpp/any_service_callback.hpp b/rclcpp/include/rclcpp/any_service_callback.hpp index 10aef7d0ee..f8c2592fc5 100644 --- a/rclcpp/include/rclcpp/any_service_callback.hpp +++ b/rclcpp/include/rclcpp/any_service_callback.hpp @@ -191,10 +191,14 @@ class AnyServiceCallback #ifndef TRACETOOLS_DISABLED std::visit( [this](auto && arg) { - TRACEPOINT( - rclcpp_callback_register, - static_cast(this), - tracetools::get_symbol(arg)); + if (TRACEPOINT_ENABLED(rclcpp_callback_register)) { + char * symbol = tracetools::get_symbol(arg); + DO_TRACEPOINT( + rclcpp_callback_register, + static_cast(this), + symbol); + std::free(symbol); + } }, callback_); #endif // TRACETOOLS_DISABLED } diff --git a/rclcpp/include/rclcpp/any_subscription_callback.hpp b/rclcpp/include/rclcpp/any_subscription_callback.hpp index d4f5fc309b..65b29d8535 100644 --- a/rclcpp/include/rclcpp/any_subscription_callback.hpp +++ b/rclcpp/include/rclcpp/any_subscription_callback.hpp @@ -965,10 +965,14 @@ class AnySubscriptionCallback #ifndef TRACETOOLS_DISABLED std::visit( [this](auto && callback) { - TRACEPOINT( - rclcpp_callback_register, - static_cast(this), - tracetools::get_symbol(callback)); + if (TRACEPOINT_ENABLED(rclcpp_callback_register)) { + char * symbol = tracetools::get_symbol(callback); + DO_TRACEPOINT( + rclcpp_callback_register, + static_cast(this), + symbol); + std::free(symbol); + } }, callback_variant_); #endif // TRACETOOLS_DISABLED } diff --git a/rclcpp/include/rclcpp/timer.hpp b/rclcpp/include/rclcpp/timer.hpp index 8af0c6fb68..91b1705985 100644 --- a/rclcpp/include/rclcpp/timer.hpp +++ b/rclcpp/include/rclcpp/timer.hpp @@ -227,10 +227,16 @@ class GenericTimer : public TimerBase rclcpp_timer_callback_added, static_cast(get_timer_handle().get()), reinterpret_cast(&callback_)); - TRACEPOINT( - rclcpp_callback_register, - reinterpret_cast(&callback_), - tracetools::get_symbol(callback_)); +#ifndef TRACETOOLS_DISABLED + if (TRACEPOINT_ENABLED(rclcpp_callback_register)) { + char * symbol = tracetools::get_symbol(callback_); + DO_TRACEPOINT( + rclcpp_callback_register, + reinterpret_cast(&callback_), + symbol); + std::free(symbol); + } +#endif } /// Default destructor.