diff options
author | Merov Linden <merov@lindenlab.com> | 2011-10-19 14:09:58 -0700 |
---|---|---|
committer | Merov Linden <merov@lindenlab.com> | 2011-10-19 14:09:58 -0700 |
commit | b8e954f98d37cb8e045135dd6bbaab9fc4421529 (patch) | |
tree | 4a9376677ef60ae6f6ad80e150f432b11d242dde /indra | |
parent | 525eb6ba9f38565be6038b5dd78cf0fb7bf0ff45 (diff) |
EXP-1353, EXP-1408, EXP-1410 : Fix bugs all related to Teleport History management. Note to dev: some use of boost trckable are being deprecated for thread safety so disconnect established connections in destructors. Also beware of singleton depending on each other as they are lazily instantiated.
Diffstat (limited to 'indra')
-rw-r--r-- | indra/newview/llpanelteleporthistory.cpp | 1 | ||||
-rw-r--r-- | indra/newview/llteleporthistory.cpp | 9 | ||||
-rw-r--r-- | indra/newview/llteleporthistory.h | 3 | ||||
-rw-r--r-- | indra/newview/llteleporthistorystorage.h | 6 |
4 files changed, 14 insertions, 5 deletions
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp index 2c3f76f546..d3543daff0 100644 --- a/indra/newview/llpanelteleporthistory.cpp +++ b/indra/newview/llpanelteleporthistory.cpp @@ -389,6 +389,7 @@ LLTeleportHistoryPanel::~LLTeleportHistoryPanel() { LLTeleportHistoryFlatItemStorage::instance().purge(); delete mGearMenuHandle.get(); + mTeleportHistoryChangedConnection.disconnect(); } BOOL LLTeleportHistoryPanel::postBuild() diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp index 0d8b45db1f..50a088b799 100644 --- a/indra/newview/llteleporthistory.cpp +++ b/indra/newview/llteleporthistory.cpp @@ -56,7 +56,8 @@ const std::string& LLTeleportHistoryItem::getTitle() const LLTeleportHistory::LLTeleportHistory(): mCurrentItem(-1), mRequestedItem(-1), - mGotInitialUpdate(false) + mGotInitialUpdate(false), + mTeleportHistoryStorage(NULL) { mTeleportFinishedConn = LLViewerParcelMgr::getInstance()-> setTeleportFinishedCallback(boost::bind(&LLTeleportHistory::updateCurrentLocation, this, _1)); @@ -115,6 +116,10 @@ void LLTeleportHistory::handleLoginComplete() void LLTeleportHistory::updateCurrentLocation(const LLVector3d& new_pos) { + if (!mTeleportHistoryStorage) + { + mTeleportHistoryStorage = LLTeleportHistoryStorage::getInstance(); + } if (mRequestedItem != -1) // teleport within the history in progress? { mCurrentItem = mRequestedItem; @@ -152,7 +157,7 @@ void LLTeleportHistory::updateCurrentLocation(const LLVector3d& new_pos) if (mCurrentItem < 0 || mCurrentItem >= (int) mItems.size()) // sanity check { llwarns << "Invalid current item. (this should not happen)" << llendl; - llassert(!"Invalid current teleport histiry item"); + llassert(!"Invalid current teleport history item"); return; } LLVector3 new_pos_local = gAgent.getPosAgentFromGlobal(new_pos); diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h index e45dc28f9b..e9c29c39bf 100644 --- a/indra/newview/llteleporthistory.h +++ b/indra/newview/llteleporthistory.h @@ -33,6 +33,7 @@ #include <string> #include <boost/function.hpp> #include <boost/signals2.hpp> +#include "llteleporthistorystorage.h" /** @@ -210,6 +211,8 @@ private: */ bool mGotInitialUpdate; + LLTeleportHistoryStorage* mTeleportHistoryStorage; + /** * Signal emitted when the history gets changed. * diff --git a/indra/newview/llteleporthistorystorage.h b/indra/newview/llteleporthistorystorage.h index 6cae0a3454..cf4c85a991 100644 --- a/indra/newview/llteleporthistorystorage.h +++ b/indra/newview/llteleporthistorystorage.h @@ -93,9 +93,6 @@ public: void removeItem(S32 idx); void save(); - void load(); - - void dump() const; /** * Set a callback to be called upon history changes. @@ -113,6 +110,9 @@ public: private: + void load(); + void dump() const; + void onTeleportHistoryChange(); bool compareByTitleAndGlobalPos(const LLTeleportHistoryPersistentItem& a, const LLTeleportHistoryPersistentItem& b); |