Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
It seems like publishing a ROS message is not passing the data to the executor so the executor sends the data during
spin_once
. That said, it might not be synchronous either as this is (middleware-)implementation defined. Seermw_publish_loaned_message
. It seems like by default, FastDDS uses an async mode which uses an internal thread to send the data. That's fine with this code I think and we can basically treat that once we call publish, the message is basically sent.Thus, instead of
spin_once
after stop is requested (due to signals), we simply drain the queue directly from Ros2ExecutorThread. This requires making
Ros2ExecutorThreadto be a friend of
Ros2Adapter. There's no issues with thread (as we are using a SPSC queue for the published message) because the
TimerCallbackof
Ros2Adapteris executing as a part of
Ros2ExecutorThreadanyway. Moving it out of
TimerCallbackand into
Ros2ExecutorThread` is no different from a threading perspective.Fixes #104