Mercurial > irccd
changeset 749:7851d95f2fbb
Irccd: copy connection in case of reconnection
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 03 Aug 2018 12:50:30 +0200 |
parents | 59029f36db60 |
children | 1e1eb83a3f0b |
files | libirccd/irccd/daemon/server.cpp libirccd/irccd/daemon/server.hpp |
diffstat | 2 files changed, 8 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- 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); }); }
--- 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<irc::connection> conn_; + std::shared_ptr<irc::connection> conn_; std::deque<std::string> queue_; std::map<std::string, std::set<std::string>> names_map_; std::map<std::string, whois_info> whois_map_;