Mercurial > irccd
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