Remove remoteRosterRequest in RosterManager destructor
This commit is contained in:
parent
e0d4583d24
commit
bfe84737ee
2 changed files with 10 additions and 3 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
|
|
Loading…
Add table
Reference in a new issue