diff --git a/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp b/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp index 3b3e846c24..9ea2c3f6b1 100644 --- a/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp +++ b/rclcpp/include/rclcpp/experimental/intra_process_manager.hpp @@ -19,6 +19,7 @@ #include +#include #include #include #include @@ -408,8 +409,12 @@ class IntraProcessManager { bool operator()(const rmw_gid_t & lhs, const rmw_gid_t & rhs) const noexcept { - // Compare implementation identifier first for fast rejection - if (lhs.implementation_identifier != rhs.implementation_identifier) { + // Compare implementation identifier string content first for fast rejection + if (lhs.implementation_identifier == nullptr || rhs.implementation_identifier == nullptr) { + return lhs.implementation_identifier == rhs.implementation_identifier && + std::equal(std::begin(lhs.data), std::end(lhs.data), std::begin(rhs.data)); + } + if (std::strcmp(lhs.implementation_identifier, rhs.implementation_identifier) != 0) { return false; } // Compare the data bytes