-
Notifications
You must be signed in to change notification settings - Fork 132
Closed
Description
Bug report
Required Info:
- Operating System:
- Ubuntu 22.04
- Installation type:
- source
- Version or commit hash:
- 6.2.3
- DDS implementation:
- rmw_fastrtps_dynamic_cpp
Steps to reproduce issue
This problem was discovered in and affected this PR mvukov/rules_ros2#148
Got this error:
'Unknown typesupport identifier, at external/ros2_rmw_fastrtps/rmw_fastrtps_dynamic_cpp/src/type_support_registry.cpp:93'Added some prints here:
type_support_ptr TypeSupportRegistry::get_message_type_support(
const rosidl_message_type_support_t * ros_type_support)
{
auto creator_fun = [&ros_type_support]() -> type_support_ptr
{
std::cerr << ros_type_support->typesupport_identifier << "\n";
std::cerr << "c "
<< using_introspection_c_typesupport(ros_type_support->typesupport_identifier)
<< " " << rosidl_typesupport_introspection_c__identifier << "\n";
std::cerr << "cpp "
<< using_introspection_cpp_typesupport(ros_type_support->typesupport_identifier)
<< " " << rosidl_typesupport_introspection_cpp::typesupport_identifier << "\n";
if (using_introspection_c_typesupport(ros_type_support->typesupport_identifier)) {
auto members = static_cast<const rosidl_typesupport_introspection_c__MessageMembers *>(
ros_type_support->data);
return new MessageTypeSupport_c(members, ros_type_support);
} else if (using_introspection_cpp_typesupport(ros_type_support->typesupport_identifier)) {
auto members = static_cast<const rosidl_typesupport_introspection_cpp::MessageMembers *>(
ros_type_support->data);
return new MessageTypeSupport_cpp(members, ros_type_support);
}
RMW_SET_ERROR_MSG("Unknown typesupport identifier");
return nullptr;
};
return get_type_support(ros_type_support, message_types_, creator_fun);
}Outcome:
rosidl_typesupport_introspection_cpp
c 0 rosidl_typesupport_introspection_c
cpp 1 rosidl_typesupport_introspection_cpp
rosidl_typesupport_introspection_c
c 0 rosidl_typesupport_introspection_c
cpp 0 rosidl_typesupport_introspection_cppExpected behavior
rosidl_typesupport_introspection_c == rosidl_typesupport_introspection_c
Actual behavior
rosidl_typesupport_introspection_c != rosidl_typesupport_introspection_c
Implementation considerations
Use strcmp:
bool using_introspection_c_typesupport(const char * typesupport_identifier)
{
return !strcmp(typesupport_identifier, rosidl_typesupport_introspection_c__identifier);
}or std::string().compare
bool using_introspection_c_typesupport(const char * typesupport_identifier) {
return !std::string(typesupport_identifier)
.compare(rosidl_typesupport_introspection_c__identifier);
}Update both these lines:
| return typesupport_identifier == rosidl_typesupport_introspection_c__identifier; |
| return typesupport_identifier == |
Metadata
Metadata
Assignees
Labels
No labels