diff --git a/modules/partyline.cpp b/modules/partyline.cpp index c77fb94b..25c2d869 100644 --- a/modules/partyline.cpp +++ b/modules/partyline.cpp @@ -123,8 +123,12 @@ public: virtual EModRet OnDeleteUser(CUser& User) { // Loop through each chan - for (set::iterator it = m_ssChannels.begin(); it != m_ssChannels.end(); ++it) { - RemoveUser(&User, *it, "KICK", "User deleted", true); + for (set::iterator it = m_ssChannels.begin(); it != m_ssChannels.end();) { + CPartylineChannel *pChan = *it; + // RemoveUser() might delete channels, so make sure our + // iterator doesn't break. + it++; + RemoveUser(&User, pChan, "KICK", "User deleted", true); } return CONTINUE; diff --git a/src/IRCNetwork.cpp b/src/IRCNetwork.cpp index 8d8c1c88..6676248a 100644 --- a/src/IRCNetwork.cpp +++ b/src/IRCNetwork.cpp @@ -181,8 +181,8 @@ CIRCNetwork::~CIRCNetwork() { } // Delete clients - for (vector::const_iterator it = m_vClients.begin(); it != m_vClients.end(); ++it) { - CZNC::Get().GetManager().DelSockByAddr(*it); + while (!m_vClients.empty()) { + CZNC::Get().GetManager().DelSockByAddr(m_vClients[0]); } m_vClients.clear();