diff --git a/rclcpp/src/rclcpp/node_interfaces/node_type_descriptions.cpp b/rclcpp/src/rclcpp/node_interfaces/node_type_descriptions.cpp index 2a50230bbe..fdac4652e0 100644 --- a/rclcpp/src/rclcpp/node_interfaces/node_type_descriptions.cpp +++ b/rclcpp/src/rclcpp/node_interfaces/node_type_descriptions.cpp @@ -85,12 +85,25 @@ class NodeTypeDescriptions::NodeTypeDescriptionsImpl if (enabled) { auto * rcl_node = node_base->get_rcl_node_handle(); - auto rcl_srv = std::make_shared(); + std::shared_ptr rcl_srv( + new rcl_service_t, + [rcl_node, logger = this->logger_](rcl_service_t * service) + { + if (rcl_service_fini(service, rcl_node) != RCL_RET_OK) { + RCLCPP_ERROR( + logger, + "Error in destruction of rcl service handle [~/get_type_description]: %s", + rcl_get_error_string().str); + rcl_reset_error(); + } + delete service; + }); + *rcl_srv = rcl_get_zero_initialized_service(); rcl_ret_t rcl_ret = rcl_node_type_description_service_init(rcl_srv.get(), rcl_node); if (rcl_ret != RCL_RET_OK) { RCLCPP_ERROR( - logger_, "Failed to initialize ~/get_type_description_service: %s", + logger_, "Failed to initialize ~/get_type_description service: %s", rcl_get_error_string().str); throw std::runtime_error( "Failed to initialize ~/get_type_description service.");