diff --git a/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp b/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp index 1cc8a81794b..f097efd6ce9 100644 --- a/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp +++ b/src/cpp/rtps/transport/shared_mem/SharedMemTransport.cpp @@ -301,8 +301,16 @@ bool SharedMemTransport::init( { return false; } - shared_mem_segment_ = shared_mem_manager_->create_segment(configuration_.segment_size(), - configuration_.port_queue_capacity()); + uint32_t max_allocations = configuration_.segment_size() / configuration_.max_message_size(); + if ((configuration_.segment_size() % configuration_.max_message_size()) != 0) + { + ++max_allocations; + } + 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(),