# HG changeset patch # User David Demelier # Date 1455305779 -3600 # Node ID 0357a728f8f81928d847ab1e6d689568b7f8079c # Parent 8384df86e1957f124714b7282f0a925c0bac8b86 Irccd: force disconnection in server-disconnect, #413 diff -r 8384df86e195 -r 0357a728f8f8 irccd/irccd.cpp --- 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 ts) diff -r 8384df86e195 -r 0357a728f8f8 irccd/irccd.h --- 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