changeset 21:0357a728f8f8

Irccd: force disconnection in server-disconnect, #413
author David Demelier <markand@malikania.fr>
date Fri, 12 Feb 2016 20:36:19 +0100
parents 8384df86e195
children 23d59afec277
files irccd/irccd.cpp irccd/irccd.h
diffstat 2 files changed, 19 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/irccd/irccd.cpp	Fri Feb 12 16:12:58 2016 +0100
+++ b/irccd/irccd.cpp	Fri Feb 12 20:36:19 2016 +0100
@@ -785,7 +785,20 @@
 
 void Irccd::removeServer(const std::string &name)
 {
-	m_servers.erase(name);
+	auto it = m_servers.find(name);
+
+	if (it != m_servers.end()) {
+		it->second->disconnect();
+		m_servers.erase(it);
+	}
+}
+
+void Irccd::clearServers() noexcept
+{
+	for (auto &pair : m_servers)
+		pair.second->disconnect();
+
+	m_servers.clear();
 }
 
 void Irccd::addTransport(shared_ptr<TransportServer> ts)
--- a/irccd/irccd.h	Fri Feb 12 16:12:58 2016 +0100
+++ b/irccd/irccd.h	Fri Feb 12 20:36:19 2016 +0100
@@ -344,17 +344,18 @@
 	/**
 	 * Remove a server from the irccd instance.
 	 *
+	 * The server if any, will be disconnected.
+	 *
 	 * @param name the server name
 	 */
 	void removeServer(const std::string &name);
 
 	/**
 	 * Remove all servers.
+	 *
+	 * All servers will be disconnected.
 	 */
-	inline void clearServers() noexcept
-	{
-		m_servers.clear();
-	}
+	void clearServers() noexcept;
 
 	/*
 	 * Transport management