summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorBrad Payne (Vir Linden) <vir@lindenlab.com>2010-01-20 17:59:16 -0500
committerBrad Payne (Vir Linden) <vir@lindenlab.com>2010-01-20 17:59:16 -0500
commita9871e8d258404ff32956b093c80b4cf56c3522c (patch)
treec6548ca98b66d6b26fbafd33cd53dd9647b20618 /indra
parent40b6cb754122f613c1f3018786f095691ec382ff (diff)
For EXT-4222: Switching outfits sometimes causes me to wear both, and show previous outfit as worn.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llappearancemgr.cpp29
1 files changed, 21 insertions, 8 deletions
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 0d4e048dde..ccda737fc6 100644
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -301,6 +301,7 @@ public:
bool pollCompletion();
bool isDone();
+ bool isTimedOut();
typedef std::list<LLFoundData> found_list_t;
found_list_t mFoundList;
@@ -313,12 +314,10 @@ public:
LLWearableHoldingPattern::LLWearableHoldingPattern():
mResolved(0)
{
- llwarns << "constructor" << llendl;
}
LLWearableHoldingPattern::~LLWearableHoldingPattern()
{
- llwarns << "destructor" << llendl;
}
bool LLWearableHoldingPattern::isDone()
@@ -326,10 +325,16 @@ bool LLWearableHoldingPattern::isDone()
return (mResolved >= (S32)mFoundList.size());
}
+bool LLWearableHoldingPattern::isTimedOut()
+{
+ static F32 max_wait_time = 5.0; // give up if wearable fetches haven't completed in max_wait_time seconds.
+ return mWaitTime.getElapsedTimeF32() > max_wait_time;
+}
+
bool LLWearableHoldingPattern::pollCompletion()
{
bool done = isDone();
- llwarns << "polling, done status: " << done << llendl;
+ llinfos << "polling, done status: " << done << llendl;
if (done)
{
// Activate all gestures in this folder
@@ -350,6 +355,10 @@ bool LLWearableHoldingPattern::pollCompletion()
gInventory.notifyObservers();
}
}
+
+ // Update wearables.
+ llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl;
+ LLAppearanceManager::instance().updateAgentWearables(this, false);
// Update attachments to match those requested.
LLVOAvatar* avatar = gAgent.getAvatarObject();
@@ -359,13 +368,17 @@ bool LLWearableHoldingPattern::pollCompletion()
LLAgentWearables::userUpdateAttachments(mObjItems);
}
- // Update wearables.
- llinfos << "Updating agent wearables with " << mResolved << " wearable items " << llendl;
- LLAppearanceManager::instance().updateAgentWearables(this, false);
-
delete this;
+ return done;
+ }
+ else if (isTimedOut())
+ {
+ llwarns << "wearables taking too long to fetch for outfit, retrying updateAppearanceFromCOF()." << llendl;
+ delete this;
+ LLAppearanceManager::instance().updateAppearanceFromCOF();
+ return true;
}
- return done;
+ return false;
}
static void removeDuplicateItems(LLInventoryModel::item_array_t& items)