Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add note for LoanedMessages's unsafety issue and setting. #4002

Merged
merged 4 commits into from
Nov 27, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/How-To-Guides.rst
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ If you are new and looking to learn the ropes, start with the :doc:`Tutorials <T
How-To-Guides/Using-Variants
How-To-Guides/Using-ros2-param
How-To-Guides/Using-ros1_bridge-Jammy-upstream
How-To-Guides/Disabling-ZeroCopy-loaned-messages
How-To-Guides/Configure-ZeroCopy-loaned-messages
How-To-Guides/Installing-on-Raspberry-Pi
How-To-Guides/Using-callback-groups
How-To-Guides/Setup-ROS-2-with-VSCode-and-Docker-Container
Expand Down
104 changes: 104 additions & 0 deletions source/How-To-Guides/Configure-ZeroCopy-loaned-messages.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
.. _ZeroCopyLoanedMessages:

fujitatomoya marked this conversation as resolved.
Show resolved Hide resolved
Configure Zero Copy Loaned Messages
===================================

.. contents:: Contents
:depth: 1
:local:

See the `Loaned Messages <https://design.ros2.org/articles/zero_copy.html>`__ article for details on how loaned messages work.

How to disable Loaned Messages
------------------------------

Publishers
~~~~~~~~~~

By default, *Loaned Messages* will try to borrow the memory from underlying middleware if it supports *Loaned Messages*.
The ``ROS_DISABLE_LOANED_MESSAGES`` environment variable can be used to disable *Loaned Messages*, and fallback to normal publisher behavior, without any code changes or middleware configuration.
You can set the environment variable with the following command:

.. tabs::

.. group-tab:: Linux

.. code-block:: console

export ROS_DISABLE_LOANED_MESSAGES=1

To maintain this setting between shell sessions, you can add the command to your shell startup script:

.. code-block:: console

echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bashrc

.. group-tab:: macOS

.. code-block:: console

export ROS_DISABLE_LOANED_MESSAGES=1

To maintain this setting between shell sessions, you can add the command to your shell startup script:

.. code-block:: console

echo "export ROS_DISABLE_LOANED_MESSAGES=1" >> ~/.bash_profile

.. group-tab:: Windows

.. code-block:: console

set ROS_DISABLE_LOANED_MESSAGES=1

If you want to make this permanent between shell sessions, also run:

.. code-block:: console

setx ROS_DISABLE_LOANED_MESSAGES 1


Subscriptions
~~~~~~~~~~~~~

Currently using *Loaned Messages* is not safe on subscription, see more details in `this issue <https://github.com/ros2/rmw_cyclonedds/issues/469>`_.
Because of this, by default *Loaned Messages* is ``disabled`` on subscription with `Set disable loan to on by default <https://github.com/ros2/rcl/pull/1110>`_ even though underlying middleware supports that.
To enable *Loaned Messages* on subscription, you need to set the environment variable ``ROS_DISABLE_LOANED_MESSAGES`` to ``0`` explicitly.

.. tabs::

.. group-tab:: Linux

.. code-block:: console

export ROS_DISABLE_LOANED_MESSAGES=0

To maintain this setting between shell sessions, you can add the command to your shell startup script:

.. code-block:: console

echo "export ROS_DISABLE_LOANED_MESSAGES=0" >> ~/.bashrc

.. group-tab:: macOS

.. code-block:: console

export ROS_DISABLE_LOANED_MESSAGES=0

To maintain this setting between shell sessions, you can add the command to your shell startup script:

.. code-block:: console

echo "export ROS_DISABLE_LOANED_MESSAGES=0" >> ~/.bash_profile

.. group-tab:: Windows

.. code-block:: console

set ROS_DISABLE_LOANED_MESSAGES=0

If you want to make this permanent between shell sessions, also run:

.. code-block:: console

setx ROS_DISABLE_LOANED_MESSAGES 0
55 changes: 0 additions & 55 deletions source/How-To-Guides/Disabling-ZeroCopy-loaned-messages.rst

This file was deleted.

2 changes: 1 addition & 1 deletion source/Releases/Release-Humble-Hawksbill.rst
Original file line number Diff line number Diff line change
Expand Up @@ -565,7 +565,7 @@ ROS_DISABLE_LOANED_MESSAGES environment variable added
""""""""""""""""""""""""""""""""""""""""""""""""""""""

This environment variable can be used to disable loaned messages support, independently if the rmw supports them or not.
For more details, see the guide :doc:`Disabling Zero Copy Loaned Messages <../How-To-Guides/Disabling-ZeroCopy-loaned-messages>`.
For more details, see the guide :doc:`Configure Zero Copy Loaned Messages <../How-To-Guides/Configure-ZeroCopy-loaned-messages>`.

rclcpp
^^^^^^
Expand Down