diff --git a/src/user.cpp b/src/user.cpp index 2ca77538709de7a2a049216f806fef4babb25d10..de4823a0a75174022f6aec7e23f6283325bd3937 100644 --- a/src/user.cpp +++ b/src/user.cpp @@ -158,11 +158,15 @@ void User::handleDisconnected(const std::string &error) { msg->setFrom(m_component->getJID()); m_component->getStanzaChannel()->sendMessage(msg); + // In server mode, server finishes the session and pass unavailable session to userManager, + // so we can't removeUser() in server mode, because it would be removed twice. + // Once in finishSession and once in m_userManager->removeUser. if (m_component->inServerMode()) { dynamic_cast(m_component->getStanzaChannel())->finishSession(m_jid, boost::shared_ptr(new Swift::StreamError())); } - - m_userManager->removeUser(this); + else { + m_userManager->removeUser(this); + } } }