Repository navigation
Conversation
rclcpp falls back to a deprecated C++-to-rcl allocator conversion when the allocator has no get_rcl_allocator() member; that conversion passes a wrong size to deallocate (see ros2/rclcpp#3058). Explain why rcl needs its own allocator, show a std::pmr::polymorphic_allocator wrapper that provides one by storing the block size in a header, and use it in the example main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Maurice <mauricepurnawan@gmail.com>
Replace the elided allocate/deallocate bodies with the complete code from demo_nodes_cpp's allocator_tutorial_pmr.cpp, including reallocate_block, zero_allocate_block and the required includes, and drop the note about the fallback conversion. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Signed-off-by: Maurice <mauricepurnawan@gmail.com>
75d4866 to
9c6683c
Compare
|
@3di-for-openrobotics @keithkirkwood-3di @kacperbojakowski-3di @sarahfarnborough-3di sorry, gotta need to ask some help here. #6981 really make it difficult to complete the action and merge the PR. it does not really tell what went wrong and how to fix though, can you have a look? |
@fujitatomoya Hi! Yes, the solution causes PRs to fail, here is a hotfix to address that: #7294 |
…al-get-rcl-allocator Signed-off-by: Maurice <mauricepurnawan@gmail.com>
kscottz
left a comment
There was a problem hiding this comment.
@mini-1235 appreciate the help! This is really helpful content but the grammar and code need some work to make this complex topic a bit more accessible to the reader.
I made some inline suggestions, but an easier solution would be to just pipe the change through an LLM to tighten up the language and add comments to most of the code.
|
|
||
| For ``std::pmr``, a small wrapper around ``std::pmr::polymorphic_allocator`` can store the size of each block in a header in front of it: | ||
|
|
||
| .. code-block:: c++ |
There was a problem hiding this comment.
CHORE: this is fairly complex code. Can you please get your favorite LLM to generate line-by-line comments to walk the user through the process?
There was a problem hiding this comment.
I asked an LLM to do that, but the result felt a bit overwhelming to read, so I decided to keep only the key comments in 46236c3. Let me know what you think!
Co-authored-by: Katherine Scott <katherineAScott@gmail.com> Signed-off-by: Maurice Alexander Purnawan <mauricepurnawan@gmail.com>
Signed-off-by: Maurice <mauricepurnawan@gmail.com>
There was a problem hiding this comment.
Documentation enhancements
This pull request is missing configured documentation enhancements or uses values outside the configured vocabulary (see tools/enhance.yaml).
source/ROS-Framework/client-libraries/Working-with-Client-Libraries/Allocator-Template-Tutorial.rst
- Invalid
.. meta::values:experience(optional, unknownadvanced; allowed:beginner,intermediate,expert; capitalisation is ignored)
Description
Updates the Allocator Template Tutorial to match the pmr demo in ros2/demos (
demo_nodes_cpp/src/topics/allocator_tutorial_pmr.cpp), which now gives its allocator aget_rcl_allocator()member.Without that member, rclcpp falls back to a generic C++-to-rcl allocator conversion that passes a wrong size to
deallocate(see ros2/rclcpp#3058). That fallback is deprecated, so the tutorial's code produced this warning when built against current Rolling:The same warning is raised from
subscription_options.hppandmessage_memory_strategy.hpp.rcl_allocator_tto send those allocations to the custom allocator too. The section explains why the callbacks cannot just forward to the C++ allocator: rcl'sdeallocatedoes not pass the block size, butstd::pmr::memory_resource::deallocateneeds it.PmrAllocatorimplementation from the demo: a thin subclass ofstd::pmr::polymorphic_allocatorwhoseget_rcl_allocator()stores each block's size in a header in front of it. The callbacks arenoexceptand returnnullptron failure, likemalloc.Allocalias fromstd::pmr::polymorphic_allocator<void>toPmrAllocator<void>.Fixes # (issue)
Did you use Generative AI?
Yes. This PR description was AI-generated with Claude Code (Claude Opus 5.5), and Claude Code (Claude Opus 5.5) also helped write the documentation changes.
Additional Information
Companion change in ros2/demos: ros2/demos#817
Checked locally with the repository's CI targets:
make test(doc8),make lint(sphinx-lint),make spellcheck(codespell) andmake html(Sphinx with warnings treated as errors).🤖 Generated with Claude Code