From 75a66a146b8f4b3127eb86fec10c24cc45d3f6d7 Mon Sep 17 00:00:00 2001 From: Vadim Savchuk Date: Thu, 26 Aug 2010 18:59:08 +0300 Subject: EXT-8727 FIXED Potential fix for a crash in LLAppearanceMgr::updateClothingOrderingInfo. I couldn't reproduce the problem (it has happened for only two users, both running MacOSX), but from what I see in the logs, it might have been caused by (or related to) NULL COF items. I haven't found out how they appear nor what exactly causes the crash, but just for any case I added a check to make sure we don't try to update wearables ordering info for such items. Reviewed by Sergey Litovchuk at https://codereview.productengine.com/secondlife/r/876/ --HG-- branch : product-engine --- indra/newview/llagentwearablesfetch.cpp | 1 + indra/newview/llappearancemgr.cpp | 8 +++++++- indra/newview/llappearancemgr.h | 2 ++ indra/newview/llinventorymodel.cpp | 2 +- 4 files changed, 11 insertions(+), 2 deletions(-) (limited to 'indra') diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp index f7ae320a6f..1edc96e165 100644 --- a/indra/newview/llagentwearablesfetch.cpp +++ b/indra/newview/llagentwearablesfetch.cpp @@ -115,6 +115,7 @@ void LLInitialWearablesFetch::processContents() LLInventoryModel::cat_array_t cat_array; LLInventoryModel::item_array_t wearable_array; LLFindWearables is_wearable; + llassert_always(mComplete.size() != 0); gInventory.collectDescendentsIf(mComplete.front(), cat_array, wearable_array, LLInventoryModel::EXCLUDE_TRASH, is_wearable); diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp index 94286fd799..7159d89d21 100644 --- a/indra/newview/llappearancemgr.cpp +++ b/indra/newview/llappearancemgr.cpp @@ -2307,12 +2307,17 @@ bool LLAppearanceMgr::updateBaseOutfit() void LLAppearanceMgr::divvyWearablesByType(const LLInventoryModel::item_array_t& items, wearables_by_type_t& items_by_type) { - items_by_type.reserve(LLWearableType::WT_COUNT); + items_by_type.resize(LLWearableType::WT_COUNT); if (items.empty()) return; for (S32 i=0; iisWearableType()) continue; @@ -2335,6 +2340,7 @@ std::string build_order_string(LLWearableType::EType type, U32 i) struct WearablesOrderComparator { + LOG_CLASS(WearablesOrderComparator); WearablesOrderComparator(const LLWearableType::EType type) { mControlSize = build_order_string(type, 0).size(); diff --git a/indra/newview/llappearancemgr.h b/indra/newview/llappearancemgr.h index 78c2142ea5..c65d9dc9ee 100644 --- a/indra/newview/llappearancemgr.h +++ b/indra/newview/llappearancemgr.h @@ -42,6 +42,8 @@ class LLOutfitUnLockTimer; class LLAppearanceMgr: public LLSingleton { + LOG_CLASS(LLAppearanceMgr); + friend class LLSingleton; friend class LLOutfitUnLockTimer; diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index 08229d3a50..53835f0166 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -501,7 +501,7 @@ void LLInventoryModel::collectDescendentsIf(const LLUUID& id, for(S32 i = 0; i < count; ++i) { item = item_array->get(i); - if (item->getActualType() == LLAssetType::AT_LINK_FOLDER) + if (item && item->getActualType() == LLAssetType::AT_LINK_FOLDER) { LLViewerInventoryCategory *linked_cat = item->getLinkedCategory(); if (linked_cat && linked_cat->getPreferredType() != LLFolderType::FT_OUTFIT) -- cgit v1.2.3