# HG changeset patch # User David Demelier # Date 1533293430 -7200 # Node ID 7851d95f2fbb379f3060e9f49b46cd0467cf8858 # Parent 59029f36db601e8ca72fa0e2dff1f03a1f4ec993 Irccd: copy connection in case of reconnection diff -r 59029f36db60 -r 7851d95f2fbb libirccd/irccd/daemon/server.cpp --- a/libirccd/irccd/daemon/server.cpp Fri Aug 03 12:55:00 2018 +0200 +++ b/libirccd/irccd/daemon/server.cpp Fri Aug 03 12:50:30 2018 +0200 @@ -449,7 +449,9 @@ void server::recv(recv_handler handler) noexcept { - conn_->recv([this, handler] (auto code, auto message) { + const auto self = shared_from_this(); + + conn_->recv([this, handler, self, c = conn_] (auto code, auto message) { handle_recv(std::move(code), message, handler); }); } @@ -461,7 +463,7 @@ const auto self = shared_from_this(); - conn_->send(queue_.front(), [this, self] (auto code) { + conn_->send(queue_.front(), [this, self, c = conn_] (auto code) { handle_send(std::move(code)); }); } @@ -683,7 +685,9 @@ handle_wait(code, handler); }); - conn_->connect(host_, std::to_string(port_), [this, handler] (auto code) { + const auto self = shared_from_this(); + + conn_->connect(host_, std::to_string(port_), [this, handler, c = conn_] (auto code) { handle_connect(code, handler); }); } diff -r 59029f36db60 -r 7851d95f2fbb libirccd/irccd/daemon/server.hpp --- a/libirccd/irccd/daemon/server.hpp Fri Aug 03 12:55:00 2018 +0200 +++ b/libirccd/irccd/daemon/server.hpp Fri Aug 03 12:50:30 2018 +0200 @@ -302,7 +302,7 @@ // Misc. boost::asio::io_service& service_; boost::asio::deadline_timer timer_; - std::unique_ptr conn_; + std::shared_ptr conn_; std::deque queue_; std::map> names_map_; std::map whois_map_;