Skip to content

Commit dfdb503

Browse files
michaelbabenkoBarry-Xu-2018
authored andcommitted
Support publishing loaned messages in LifecyclePublisher (ros2#2159)
* Support loaned messages in LifecyclePublisher Signed-off-by: Michael Babenko <[email protected]>
1 parent d8fd4b8 commit dfdb503

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

rclcpp_lifecycle/include/rclcpp_lifecycle/lifecycle_publisher.hpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,24 @@ class LifecyclePublisher : public SimpleManagedEntity,
9191
rclcpp::Publisher<MessageT, Alloc>::publish(msg);
9292
}
9393

94+
/// LifecyclePublisher publish function
95+
/**
96+
* The publish function checks whether the communication
97+
* was enabled or disabled and forwards the message
98+
* to the actual rclcpp Publisher base class
99+
*/
100+
virtual void
101+
publish(
102+
rclcpp::LoanedMessage<typename rclcpp::Publisher<MessageT,
103+
Alloc>::ROSMessageType, Alloc> && loaned_msg)
104+
{
105+
if (!this->is_activated()) {
106+
log_publisher_not_enabled();
107+
return;
108+
}
109+
rclcpp::Publisher<MessageT, Alloc>::publish(std::move(loaned_msg));
110+
}
111+
94112
void
95113
on_activate() override
96114
{

rclcpp_lifecycle/test/test_lifecycle_publisher.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,10 @@ TEST_P(TestLifecyclePublisher, publish_managed_by_node) {
129129
auto msg_ptr = std::make_unique<test_msgs::msg::Empty>();
130130
EXPECT_NO_THROW(node_->publisher()->publish(std::move(msg_ptr)));
131131
}
132+
{
133+
auto loaned_msg = node_->publisher()->borrow_loaned_message();
134+
EXPECT_NO_THROW(node_->publisher()->publish(std::move(loaned_msg)));
135+
}
132136
node_->trigger_transition(
133137
rclcpp_lifecycle::Transition(Transition::TRANSITION_DEACTIVATE), ret);
134138
ASSERT_EQ(success, ret);
@@ -143,6 +147,10 @@ TEST_P(TestLifecyclePublisher, publish_managed_by_node) {
143147
auto msg_ptr = std::make_unique<test_msgs::msg::Empty>();
144148
EXPECT_NO_THROW(node_->publisher()->publish(std::move(msg_ptr)));
145149
}
150+
{
151+
auto loaned_msg = node_->publisher()->borrow_loaned_message();
152+
EXPECT_NO_THROW(node_->publisher()->publish(std::move(loaned_msg)));
153+
}
146154
}
147155

148156
TEST_P(TestLifecyclePublisher, publish) {
@@ -157,6 +165,10 @@ TEST_P(TestLifecyclePublisher, publish) {
157165
auto msg_ptr = std::make_unique<test_msgs::msg::Empty>();
158166
EXPECT_NO_THROW(node_->publisher()->publish(std::move(msg_ptr)));
159167
}
168+
{
169+
auto loaned_msg = node_->publisher()->borrow_loaned_message();
170+
EXPECT_NO_THROW(node_->publisher()->publish(std::move(loaned_msg)));
171+
}
160172
node_->publisher()->on_activate();
161173
EXPECT_TRUE(node_->publisher()->is_activated());
162174
{
@@ -167,6 +179,10 @@ TEST_P(TestLifecyclePublisher, publish) {
167179
auto msg_ptr = std::make_unique<test_msgs::msg::Empty>();
168180
EXPECT_NO_THROW(node_->publisher()->publish(std::move(msg_ptr)));
169181
}
182+
{
183+
auto loaned_msg = node_->publisher()->borrow_loaned_message();
184+
EXPECT_NO_THROW(node_->publisher()->publish(std::move(loaned_msg)));
185+
}
170186
}
171187

172188
INSTANTIATE_TEST_SUITE_P(

0 commit comments

Comments
 (0)