From 05dd11698819f47e8ea36803a1dc980f4e0ed95d Mon Sep 17 00:00:00 2001 From: Armin Weatherwax Date: Fri, 1 Oct 2010 14:15:16 +0200 Subject: fix friendlist not cleared on logout --- linden/indra/newview/llappviewer.cpp | 3 +++ linden/indra/newview/llcallingcard.cpp | 12 ++++++++++++ linden/indra/newview/llcallingcard.h | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp index b3f3e59..accc523 100644 --- a/linden/indra/newview/llappviewer.cpp +++ b/linden/indra/newview/llappviewer.cpp @@ -1185,6 +1185,9 @@ bool LLAppViewer::cleanup() llinfos << "Viewer disconnected" << llendflush; + //this deletes all your buddies + LLAvatarTracker::instance().reset(); + if (mQuitRequested) { display_cleanup(); diff --git a/linden/indra/newview/llcallingcard.cpp b/linden/indra/newview/llcallingcard.cpp index 155fb60..15be0eb 100644 --- a/linden/indra/newview/llcallingcard.cpp +++ b/linden/indra/newview/llcallingcard.cpp @@ -137,8 +137,20 @@ LLAvatarTracker::~LLAvatarTracker() deleteTrackingData(); std::for_each(mObservers.begin(), mObservers.end(), DeletePointer()); std::for_each(mBuddyInfo.begin(), mBuddyInfo.end(), DeletePairedPointer()); + mObservers.erase(mObservers.begin(), mObservers.end()); + mBuddyInfo.erase(mBuddyInfo.begin(), mBuddyInfo.end()); } + +void LLAvatarTracker::reset() +{ + std::for_each(mBuddyInfo.begin(), mBuddyInfo.end(), DeletePairedPointer()); + mBuddyInfo.erase(mBuddyInfo.begin(), mBuddyInfo.end()); + mModifyMask |= LLFriendObserver::REMOVE; + notifyObservers(); +} + + void LLAvatarTracker::track(const LLUUID& avatar_id, const std::string& name) { deleteTrackingData(); diff --git a/linden/indra/newview/llcallingcard.h b/linden/indra/newview/llcallingcard.h index 0db5376..d3f53c6 100644 --- a/linden/indra/newview/llcallingcard.h +++ b/linden/indra/newview/llcallingcard.h @@ -86,7 +86,7 @@ class LLAvatarTracker { public: static LLAvatarTracker& instance() { return sInstance; } - + void reset(); void track(const LLUUID& avatar_id, const std::string& name); void untrack(const LLUUID& avatar_id); bool isTrackedAgentValid() { return mTrackedAgentValid; } -- cgit v1.1