Skip to content

Commit

Permalink
Fix memory leaks in tests
Browse files Browse the repository at this point in the history
- Use custom deleter when releasing rcl serialized buffer to a shared
pointer.

Signed-off-by: Michael Orlov <[email protected]>
  • Loading branch information
MichaelOrlov committed Jan 28, 2025
1 parent bd90a4b commit 893afc6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 14 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,9 +45,12 @@ class McapStorageTestFixture : public rosbag2_test_common::TemporaryDirectoryFix
auto serialized_msg = std::make_shared<rclcpp::SerializedMessage>();
serialization.serialize_message(&std_string_msg, serialized_msg.get());

auto ret = std::make_shared<rcutils_uint8_array_t>();
*ret = serialized_msg->release_rcl_serialized_message();
return ret;
auto msg = new rcutils_uint8_array_t;
*msg = serialized_msg->release_rcl_serialized_message();
return std::shared_ptr<rcutils_uint8_array_t>(msg, [](rmw_serialized_message_t * msg) {
EXPECT_EQ(rmw_serialized_message_fini(msg), RMW_RET_OK);
delete msg;
});
}

std::shared_ptr<rosbag2_storage::storage_interfaces::ReadWriteInterface> write_messages_to_mcap(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,18 @@ class MemoryManagement

template<typename T>
inline
std::shared_ptr<rmw_serialized_message_t>
serialize_message(std::shared_ptr<T> message)
std::shared_ptr<rcutils_uint8_array_t> serialize_message(std::shared_ptr<T> message)
{
rclcpp::Serialization<T> ser;
rclcpp::SerializedMessage serialized_message;
ser.serialize_message(message.get(), &serialized_message);
auto serialized_msg = std::make_shared<rclcpp::SerializedMessage>();
ser.serialize_message(message.get(), serialized_msg.get());

auto ret = std::make_shared<rmw_serialized_message_t>();
*ret = serialized_message.release_rcl_serialized_message();
return ret;
auto msg = new rcutils_uint8_array_t;
*msg = serialized_msg->release_rcl_serialized_message();
return std::shared_ptr<rcutils_uint8_array_t>(msg, [](rmw_serialized_message_t * msg) {
EXPECT_EQ(rmw_serialized_message_fini(msg), RMW_RET_OK);
delete msg;
});
}

template<typename T>
Expand All @@ -58,10 +60,13 @@ class MemoryManagement

std::shared_ptr<rmw_serialized_message_t> make_initialized_message()
{
rclcpp::SerializedMessage serialized_message(0u);
auto ret = std::make_shared<rmw_serialized_message_t>();
*ret = serialized_message.release_rcl_serialized_message();
return ret;
rclcpp::SerializedMessage serialized_msg(0u);
auto msg = new rcutils_uint8_array_t;
*msg = serialized_msg.release_rcl_serialized_message();
return std::shared_ptr<rcutils_uint8_array_t>(msg, [](rmw_serialized_message_t * msg) {
EXPECT_EQ(rmw_serialized_message_fini(msg), RMW_RET_OK);
delete msg;
});
}
};

Expand Down

0 comments on commit 893afc6

Please sign in to comment.