TypeAdapted publishing doesn't use provided allocator
Open
@clalancette is already working on this.
Since Apr 18, 2024.
- Dominant language
- C++
- Stars
- 805
- Forks
- 564
- Avg merge
- 1d 17h
- Merged PRs (30d)
- 27
Description
Bug report
Required Info:
- Operating System:
- Ubuntu 20.04
- Installation type:
- From source
- Version or commit hash:
- DDS implementation:
- Fast-RTPS, RTI Connext
- Client library (if applicable):
- rclcpp
Steps to reproduce issue
Create a publisher using an adapted type and a custom allocator
using AdaptedType = rclcpp::adapt_type<std::string>::as<std_msgs::msg::String>;
auto alloc = std::make_shared<MyAllocator<void>>();
rclcpp::PublisherOptionsWithAllocator<MyAllocator<void>> publisher_options;
publisher_options.allocator = alloc;
auto publisher = node->create_publisher<AdaptedType>(
"allocator_tutorial", 10, publisher_options);
publisher->publish("A string");
Expected behavior
The ROS message that is created by Publisher::publish() will be allocated using the provided allocator.
Actual behavior
The ROS message is allocated using std::make_unique<ROSMessageType>()
Additional information
Rather than using std::make_unique<ROSMessageType>(), the create_ros_message_unique_ptr() can be used instead in the following two locations:
- https://github.com/ros2/rclcpp/blob/f9c4894f96ea083fc5acfcea4f1ea83850759e63/rclcpp/include/rclcpp/publisher.hpp#L323
- https://github.com/ros2/rclcpp/blob/f9c4894f96ea083fc5acfcea4f1ea83850759e63/rclcpp/include/rclcpp/publisher.hpp#L370
- auto ros_msg_ptr = std::make_unique<ROSMessageType>();
+ auto ros_msg_ptr = create_ros_message_unique_ptr();
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.