Remove remoteRosterRequest in RosterManager destructor

This commit is contained in:
HanzZ 2011-11-07 20:11:49 +01:00
parent e0d4583d24
commit bfe84737ee
2 changed files with 10 additions and 3 deletions

View file

@ -125,6 +125,7 @@ class RosterManager {
Swift::Timer::ref m_RIETimer;
std::list <Swift::SetRosterRequest::ref> m_requests;
bool m_supportRemoteRoster;
AddressedRosterRequest::ref m_remoteRosterRequest;
};
}

View file

@ -52,9 +52,9 @@ RosterManager::RosterManager(User *user, Component *component){
m_supportRemoteRoster = false;
if (!m_component->inServerMode()) {
AddressedRosterRequest::ref request = AddressedRosterRequest::ref(new AddressedRosterRequest(m_component->getIQRouter(), m_user->getJID().toBare()));
request->onResponse.connect(boost::bind(&RosterManager::handleRemoteRosterResponse, this, _1, _2));
request->send();
m_remoteRosterRequest = AddressedRosterRequest::ref(new AddressedRosterRequest(m_component->getIQRouter(), m_user->getJID().toBare()));
m_remoteRosterRequest->onResponse.connect(boost::bind(&RosterManager::handleRemoteRosterResponse, this, _1, _2));
m_remoteRosterRequest->send();
}
}
@ -67,6 +67,11 @@ RosterManager::~RosterManager() {
sendUnavailablePresences(m_user->getJID().toBare());
if (m_remoteRosterRequest) {
m_remoteRosterRequest->onResponse.disconnect_all_slots();
m_component->getIQRouter()->removeHandler(m_remoteRosterRequest);
}
for (std::map<std::string, Buddy *, std::less<std::string>, boost::pool_allocator< std::pair<std::string, Buddy *> > >::iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
Buddy *buddy = (*it).second;
if (!buddy) {
@ -198,6 +203,7 @@ void RosterManager::handleBuddyRosterPushResponse(Swift::ErrorPayload::ref error
}
void RosterManager::handleRemoteRosterResponse(boost::shared_ptr<Swift::RosterPayload> payload, Swift::ErrorPayload::ref error) {
m_remoteRosterRequest.reset();
if (error) {
m_supportRemoteRoster = false;
LOG4CXX_INFO(logger, m_user->getJID().toString() << ": This server does not support remote roster protoXEP");