diff --git a/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h b/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h index db8d1951607..8b85ebdfed5 100644 --- a/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h +++ b/include/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h @@ -15,6 +15,7 @@ #ifndef _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ #define _FASTDDS_SHAREDMEM_TRANSPORT_DESCRIPTOR_ +#include #include #include @@ -43,6 +44,10 @@ class TransportInterface; */ struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor { + static constexpr uint32_t shm_default_segment_size = 0; + static constexpr uint32_t shm_default_port_queue_capacity = 512; + static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000; + //! Destructor virtual ~SharedMemTransportDescriptor() = default; @@ -149,13 +154,13 @@ struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor private: - uint32_t segment_size_; - uint32_t port_queue_capacity_; - uint32_t healthy_check_timeout_ms_; - std::string rtps_dump_file_; + uint32_t segment_size_ = shm_default_segment_size; + uint32_t port_queue_capacity_ = shm_default_port_queue_capacity; + uint32_t healthy_check_timeout_ms_ = shm_default_healthy_check_timeout_ms; + std::string rtps_dump_file_ {""}; //! Thread settings for the transport dump thread - ThreadSettings dump_thread_; + ThreadSettings dump_thread_ {}; }; diff --git a/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp b/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp index df70aba1cc6..5037526a612 100644 --- a/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp +++ b/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp @@ -13,6 +13,7 @@ // limitations under the License. #include +#include #include #include #include @@ -26,6 +27,7 @@ #include #include #include +#include #include #include @@ -51,6 +53,9 @@ using LocatorSelectorEntry = fastrtps::rtps::LocatorSelectorEntry; using LocatorSelector = fastrtps::rtps::LocatorSelector; using PortParameters = fastrtps::rtps::PortParameters; +// TODO(Adolfo): Calculate this value from UDP sockets buffers size. +static constexpr uint32_t shm_default_segment_size = 512 * 1024; + TransportInterface* SharedMemTransportDescriptor::create_transport() const { return new SharedMemTransport(*this); @@ -249,8 +254,6 @@ bool SharedMemTransport::init( const uint32_t& max_msg_size_no_frag) { (void) max_msg_size_no_frag; - // TODO(Adolfo): Calculate this value from UDP sockets buffers size. - static constexpr uint32_t shm_default_segment_size = 512 * 1024; if (configuration_.segment_size() == 0) { @@ -279,8 +282,14 @@ bool SharedMemTransport::init( { return false; } - shared_mem_segment_ = shared_mem_manager_->create_segment(configuration_.segment_size(), - configuration_.port_queue_capacity()); + constexpr uint32_t mean_message_size = + shm_default_segment_size / SharedMemTransportDescriptor::shm_default_port_queue_capacity; + uint32_t max_allocations = configuration_.segment_size() / mean_message_size; + if (configuration_.port_queue_capacity() > max_allocations) + { + max_allocations = configuration_.port_queue_capacity(); + } + shared_mem_segment_ = shared_mem_manager_->create_segment(configuration_.segment_size(), max_allocations); // Memset the whole segment to zero in order to force physical map of the buffer auto buffer = shared_mem_segment_->alloc_buffer(configuration_.segment_size(), diff --git a/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp b/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp index 7b477ff0b06..df51408a0e1 100644 --- a/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp +++ b/src/cpp/rtps/transport/shared_mem/SharedMemTransportDescriptor.cpp @@ -21,27 +21,11 @@ using namespace eprosima::fastdds::rtps; -namespace eprosima { -namespace fastdds { -namespace rtps { - -static constexpr uint32_t shm_default_segment_size = 0; -static constexpr uint32_t shm_default_port_queue_capacity = 512; -static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000; - -} // rtps -} // fastdds -} // eprosima - //********************************************************* // SharedMemTransportDescriptor //********************************************************* SharedMemTransportDescriptor::SharedMemTransportDescriptor() : PortBasedTransportDescriptor(shm_default_segment_size, s_maximumInitialPeersRange) - , segment_size_(shm_default_segment_size) - , port_queue_capacity_(shm_default_port_queue_capacity) - , healthy_check_timeout_ms_(shm_default_healthy_check_timeout_ms) - , rtps_dump_file_("") { maxMessageSize = s_maximumMessageSize; } diff --git a/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h b/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h index 21795787fff..2f65b0bbde6 100644 --- a/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h +++ b/test/mock/rtps/SharedMemTransportDescriptor/fastdds/rtps/transport/shared_mem/SharedMemTransportDescriptor.h @@ -32,8 +32,12 @@ class TransportInterface; * * @ingroup TRANSPORT_MODULE */ -typedef struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor +struct SharedMemTransportDescriptor : public PortBasedTransportDescriptor { + static constexpr uint32_t shm_default_segment_size = 0; + static constexpr uint32_t shm_default_port_queue_capacity = 512; + static constexpr uint32_t shm_default_healthy_check_timeout_ms = 1000; + virtual ~SharedMemTransportDescriptor() { @@ -125,13 +129,13 @@ typedef struct SharedMemTransportDescriptor : public PortBasedTransportDescripto private: - uint32_t segment_size_; - uint32_t port_queue_capacity_; - uint32_t healthy_check_timeout_ms_; + uint32_t segment_size_ = shm_default_segment_size; + uint32_t port_queue_capacity_ = shm_default_port_queue_capacity; + uint32_t healthy_check_timeout_ms_ = shm_default_healthy_check_timeout_ms; std::string rtps_dump_file_; ThreadSettings dump_thread_; -}SharedMemTransportDescriptor; +}; } // namespace rtps } // namespace fastdds