diff --git a/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp b/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp index a9a35ff624..cfd82eebcf 100644 --- a/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp +++ b/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp @@ -454,6 +454,8 @@ class IntraProcessManager if (std::next(it) == subscription_ids.end()) { // If this is the last subscription, give up ownership subscription->provide_intra_process_data(std::move(message)); + // Last message delivered, break from for loop + break; } else { // Copy the message since we have additional subscriptions to serve Deleter deleter = message.get_deleter(); @@ -493,6 +495,8 @@ class IntraProcessManager if (std::next(it) == subscription_ids.end()) { // If this is the last subscription, give up ownership ros_message_subscription->provide_intra_process_message(std::move(message)); + // Last message delivered, break from for loop + break; } else { // Copy the message since we have additional subscriptions to serve Deleter deleter = message.get_deleter();