Compare commits

...

2 Commits

Author SHA1 Message Date
Tomoya Fujita
a71ec71fda std::memcpy only available size of destination buffer.
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
2024-04-15 10:55:40 -07:00
Tomoya Fujita
5fd47c4bfd use custom allocator from publisher option.
Signed-off-by: Tomoya Fujita <Tomoya.Fujita@sony.com>
2024-04-14 15:19:10 -07:00
2 changed files with 8 additions and 6 deletions

View File

@@ -320,7 +320,7 @@ public:
{
if (!intra_process_is_enabled_) {
// In this case we're not using intra process.
auto ros_msg_ptr = std::make_unique<ROSMessageType>();
auto ros_msg_ptr = create_ros_message_unique_ptr();
rclcpp::TypeAdapter<MessageT>::convert_to_ros_message(*msg, *ros_msg_ptr);
this->do_inter_process_publish(*ros_msg_ptr);
return;
@@ -330,7 +330,8 @@ public:
get_subscription_count() > get_intra_process_subscription_count();
if (inter_process_publish_needed) {
auto ros_msg_ptr = std::make_shared<ROSMessageType>();
auto ros_msg_ptr = std::allocate_shared<
ROSMessageType, ROSMessageTypeAllocator>(ros_message_type_allocator_);
rclcpp::TypeAdapter<MessageT>::convert_to_ros_message(*msg, *ros_msg_ptr);
this->do_intra_process_publish(std::move(msg));
this->do_inter_process_publish(*ros_msg_ptr);
@@ -339,7 +340,8 @@ public:
}
} else {
if (buffer_) {
auto ros_msg_ptr = std::make_shared<ROSMessageType>();
auto ros_msg_ptr = std::allocate_shared<
ROSMessageType, ROSMessageTypeAllocator>(ros_message_type_allocator_);
rclcpp::TypeAdapter<MessageT>::convert_to_ros_message(*msg, *ros_msg_ptr);
buffer_->add_shared(ros_msg_ptr);
}
@@ -367,7 +369,7 @@ public:
{
if (!intra_process_is_enabled_) {
// Convert to the ROS message equivalent and publish it.
auto ros_msg_ptr = std::make_unique<ROSMessageType>();
auto ros_msg_ptr = create_ros_message_unique_ptr();
rclcpp::TypeAdapter<MessageT>::convert_to_ros_message(msg, *ros_msg_ptr);
this->do_inter_process_publish(*ros_msg_ptr);
return;

View File

@@ -118,8 +118,8 @@ struct TypeAdapter<std::string, rclcpp::msg::LargeMessage>
const custom_type & source,
ros_message_type & destination)
{
destination.size = source.size();
std::memcpy(destination.data.data(), source.data(), source.size());
destination.size = std::min(source.size(), destination.data.max_size());
std::memcpy(destination.data.data(), source.data(), destination.size);
}
static void