From 042ff4748b76bb5f55007cdb90fb701e2d5aca95 Mon Sep 17 00:00:00 2001 From: "Peter Mitrano (AR)" Date: Tue, 12 Aug 2025 15:01:53 +0200 Subject: [PATCH] Clearer warning message, the old one lacked information and was perhaps misleading (#2927) * change misleading warning message, making it more correct and informative Signed-off-by: Peter Mitrano (AR) * Fix compile error. Needed to also build rcl from source. Signed-off-by: Peter Mitrano (AR) * explicitely initialize pointer as null, to adhere to best practice Signed-off-by: Peter Mitrano (AR) --------- Signed-off-by: Peter Mitrano (AR) (cherry picked from commit 37677791ca42730952ab0336a4b274299362192c) --- .../src/lifecycle_node_interface_impl.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/rclcpp_lifecycle/src/lifecycle_node_interface_impl.cpp b/rclcpp_lifecycle/src/lifecycle_node_interface_impl.cpp index cdf2990dde..94988e896e 100644 --- a/rclcpp_lifecycle/src/lifecycle_node_interface_impl.cpp +++ b/rclcpp_lifecycle/src/lifecycle_node_interface_impl.cpp @@ -397,6 +397,7 @@ LifecycleNode::LifecycleNodeInterfaceImpl::change_state( constexpr bool publish_update = true; State initial_state; unsigned int current_state_id; + const rcl_lifecycle_transition_t * original_transition{nullptr}; { std::lock_guard lock(state_machine_mutex_); @@ -411,6 +412,10 @@ LifecycleNode::LifecycleNodeInterfaceImpl::change_state( // keep the initial state to pass to a transition callback initial_state = State(state_machine_.current_state); + original_transition = + rcl_lifecycle_get_transition_by_id(state_machine_.current_state, transition_id); + + if ( rcl_lifecycle_trigger_transition_by_id( &state_machine_, transition_id, publish_update) != RCL_RET_OK) @@ -461,12 +466,15 @@ LifecycleNode::LifecycleNodeInterfaceImpl::change_state( // Update the internal current_state_ current_state_ = State(state_machine_.current_state); - // error handling ?! + // error handling // TODO(karsten1987): iterate over possible ret value if (cb_return_code == node_interfaces::LifecycleNodeInterface::CallbackReturn::ERROR) { - RCLCPP_WARN( - node_logging_interface_->get_logger(), - "Error occurred while doing error handling."); + if (original_transition) { + RCLCPP_WARN( + node_logging_interface_->get_logger(), + "Callback returned ERROR during the transition: %s", original_transition->label); + } + auto error_cb_code = execute_callback(current_state_id, initial_state); auto error_cb_label = get_label_for_return_code(error_cb_code);