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_;