diff --git a/rclcpp/include/rclcpp/message_memory_strategy.hpp b/rclcpp/include/rclcpp/message_memory_strategy.hpp index f548d953c2..a51002065f 100644 --- a/rclcpp/include/rclcpp/message_memory_strategy.hpp +++ b/rclcpp/include/rclcpp/message_memory_strategy.hpp @@ -18,6 +18,7 @@ #include #include +#include "rcl/allocator.h" #include "rcl/types.h" #include "rclcpp/allocator/allocator_common.hpp" @@ -61,7 +62,12 @@ class MessageMemoryStrategy message_allocator_ = std::make_shared(); serialized_message_allocator_ = std::make_shared(); buffer_allocator_ = std::make_shared(); - rcutils_allocator_ = allocator::get_rcl_allocator(*buffer_allocator_.get()); + if constexpr (std::is_same_v>) { + rcutils_allocator_ = rcl_get_default_allocator(); + } else { + rcutils_allocator_ = allocator::get_rcl_allocator(*buffer_allocator_.get()); + } } explicit MessageMemoryStrategy(std::shared_ptr allocator) @@ -69,7 +75,12 @@ class MessageMemoryStrategy message_allocator_ = std::make_shared(*allocator.get()); serialized_message_allocator_ = std::make_shared(*allocator.get()); buffer_allocator_ = std::make_shared(*allocator.get()); - rcutils_allocator_ = allocator::get_rcl_allocator(*buffer_allocator_.get()); + if constexpr (std::is_same_v>) { + rcutils_allocator_ = rcl_get_default_allocator(); + } else { + rcutils_allocator_ = allocator::get_rcl_allocator(*buffer_allocator_.get()); + } } virtual ~MessageMemoryStrategy() = default; diff --git a/rclcpp/include/rclcpp/publisher_options.hpp b/rclcpp/include/rclcpp/publisher_options.hpp index 3c88ebccd1..0f198a8874 100644 --- a/rclcpp/include/rclcpp/publisher_options.hpp +++ b/rclcpp/include/rclcpp/publisher_options.hpp @@ -119,6 +119,10 @@ struct PublisherOptionsWithAllocator : public PublisherOptionsBase rcl_allocator_t get_rcl_allocator() const { + if constexpr (std::is_same_v>) { + return rcl_get_default_allocator(); + } + if (!plain_allocator_storage_) { plain_allocator_storage_ = std::make_shared(*this->get_allocator()); diff --git a/rclcpp/include/rclcpp/strategies/allocator_memory_strategy.hpp b/rclcpp/include/rclcpp/strategies/allocator_memory_strategy.hpp index 88698179d4..6d30d1e804 100644 --- a/rclcpp/include/rclcpp/strategies/allocator_memory_strategy.hpp +++ b/rclcpp/include/rclcpp/strategies/allocator_memory_strategy.hpp @@ -424,7 +424,11 @@ class AllocatorMemoryStrategy : public memory_strategy::MemoryStrategy rcl_allocator_t get_allocator() override { - return rclcpp::allocator::get_rcl_allocator(*allocator_.get()); + if constexpr (std::is_same_v>) { + return rcl_get_default_allocator(); + } else { + return rclcpp::allocator::get_rcl_allocator(*allocator_.get()); + } } size_t number_of_ready_subscriptions() const override diff --git a/rclcpp/include/rclcpp/subscription_options.hpp b/rclcpp/include/rclcpp/subscription_options.hpp index 2b819da399..35d3d3c279 100644 --- a/rclcpp/include/rclcpp/subscription_options.hpp +++ b/rclcpp/include/rclcpp/subscription_options.hpp @@ -163,11 +163,15 @@ struct SubscriptionOptionsWithAllocator : public SubscriptionOptionsBase rcl_allocator_t get_rcl_allocator() const { - if (!plain_allocator_storage_) { - plain_allocator_storage_ = - std::make_shared(*this->get_allocator()); + if constexpr (std::is_same_v>) { + return rcl_get_default_allocator(); + } else { + if (!plain_allocator_storage_) { + plain_allocator_storage_ = + std::make_shared(*this->get_allocator()); + } + return rclcpp::allocator::get_rcl_allocator(*plain_allocator_storage_); } - return rclcpp::allocator::get_rcl_allocator(*plain_allocator_storage_); } // This is a temporal workaround, to make sure that get_allocator()