diff --git a/src/cpp/rtps/transport/shared_mem/SharedMemManager.hpp b/src/cpp/rtps/transport/shared_mem/SharedMemManager.hpp index 302c2c4513c..2e0dc7135e1 100644 --- a/src/cpp/rtps/transport/shared_mem/SharedMemManager.hpp +++ b/src/cpp/rtps/transport/shared_mem/SharedMemManager.hpp @@ -784,10 +784,9 @@ class SharedMemManager : void regenerate_port() { - auto new_port = shared_mem_manager_->regenerate_port(global_port_, global_port_->open_mode()); - - auto new_listener = new_port->create_listener(); - + auto new_port = global_port_; + shared_mem_manager_->regenerate_port(new_port, new_port->open_mode()); + auto new_listener = std::make_shared(shared_mem_manager_, new_port); *this = std::move(*new_listener); } @@ -931,9 +930,7 @@ class SharedMemManager : void regenerate_port() { recover_blocked_processing(); - auto new_port = shared_mem_manager_->regenerate_port(global_port_, open_mode_); - - *this = std::move(*new_port); + shared_mem_manager_->regenerate_port(global_port_, open_mode_); } SharedMemManager* shared_mem_manager_; @@ -1017,11 +1014,11 @@ class SharedMemManager : private: - std::shared_ptr regenerate_port( - std::shared_ptr port, + void regenerate_port( + std::shared_ptr& port, SharedMemGlobal::Port::OpenMode open_mode) { - return std::make_shared(this, global_segment_.regenerate_port(port, open_mode), open_mode); + port = global_segment_.regenerate_port(port, open_mode); } /**