@@ -29,18 +29,6 @@ DeepNodeBase::DeepNodeBase(const std::string & node_name, const rclcpp::NodeOpti
2929 plugin_loader_ =
3030 std::make_unique<pluginlib::ClassLoader<DeepBackendPlugin>>("deep_core", "deep_ros::DeepBackendPlugin");
3131 declare_parameters();
32-
33- // Set up parameter callback for dynamic reconfiguration
34- parameter_callback_handle_ =
35- add_on_set_parameters_callback(std::bind(&DeepNodeBase::on_parameter_change, this, std::placeholders::_1));
36- }
37-
38- DeepNodeBase::~DeepNodeBase()
39- {
40- // Remove parameter callback to prevent callback invocation during destruction
41- if (parameter_callback_handle_) {
42- remove_on_set_parameters_callback(parameter_callback_handle_.get());
43- }
4432}
4533
4634void DeepNodeBase::declare_parameters()
@@ -84,6 +72,9 @@ CallbackReturn DeepNodeBase::on_activate(const rclcpp_lifecycle::State & state)
8472{
8573 RCLCPP_INFO(get_logger(), "Activating DeepNodeBase");
8674
75+ parameter_callback_handle_ =
76+ add_on_set_parameters_callback(std::bind(&DeepNodeBase::on_parameter_change, this, std::placeholders::_1));
77+
8778 // Start bond if enabled
8879 if (bond_enabled_ && bond_) {
8980 bond_->start();
@@ -96,6 +87,12 @@ CallbackReturn DeepNodeBase::on_activate(const rclcpp_lifecycle::State & state)
9687CallbackReturn DeepNodeBase::on_deactivate(const rclcpp_lifecycle::State & state)
9788{
9889 RCLCPP_INFO(get_logger(), "Deactivating DeepNodeBase");
90+
91+ if (parameter_callback_handle_) {
92+ remove_on_set_parameters_callback(parameter_callback_handle_.get());
93+ parameter_callback_handle_.reset();
94+ }
95+
9996 return on_deactivate_impl(state);
10097}
10198
@@ -118,6 +115,11 @@ CallbackReturn DeepNodeBase::on_shutdown(const rclcpp_lifecycle::State & state)
118115{
119116 RCLCPP_INFO(get_logger(), "Shutting down DeepNodeBase");
120117
118+ if (parameter_callback_handle_) {
119+ remove_on_set_parameters_callback(parameter_callback_handle_.get());
120+ parameter_callback_handle_.reset();
121+ }
122+
121123 // Stop bond if active
122124 if (bond_) {
123125 bond_.reset();
0 commit comments