summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-08-15 00:00:40 +0300
committerAndrey Kleshchev <andreykproductengine@lindenlab.com>2023-08-15 00:00:40 +0300
commitfa5af90e30aaaf638d5083dff6258a66da06c00c (patch)
tree1ef39bd2dfb696cf741e8dcce4b10dc69eb29a6b /indra
parent809ebe7d6a98ec2ed450f3fd0bdb95dc8bd648cd (diff)
SL-18629 Fix observers failing to start fetching items in some cases
start(folder.first) ignored fetch request due to folder having version
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llinventoryobserver.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
index 0b02528246..0d96c7a005 100644
--- a/indra/newview/llinventoryobserver.cpp
+++ b/indra/newview/llinventoryobserver.cpp
@@ -266,8 +266,8 @@ void LLInventoryFetchItemsObserver::startFetch()
LLSD items_llsd;
- typedef std::map<LLUUID, uuid_vec_t> requests_by_fodlers_t;
- requests_by_fodlers_t requests;
+ typedef std::map<LLUUID, uuid_vec_t> requests_by_folders_t;
+ requests_by_folders_t requests;
for (uuid_vec_t::const_iterator it = mIDs.begin(); it < mIDs.end(); ++it)
{
LLViewerInventoryItem* item = gInventory.getItem(*it);
@@ -335,12 +335,19 @@ void LLInventoryFetchItemsObserver::startFetch()
if (aisv3)
{
const S32 MAX_INDIVIDUAL_REQUESTS = 10;
- for (requests_by_fodlers_t::value_type &folder : requests)
+ for (requests_by_folders_t::value_type &folder : requests)
{
+ LLViewerInventoryCategory* cat = gInventory.getCategory(folder.first);
if (folder.second.size() > MAX_INDIVIDUAL_REQUESTS)
{
// requesting one by one will take a while
// do whole folder
+ if (cat)
+ {
+ // Either drop version or use scheduleFolderFetch to force-fetch
+ // otherwise background fetch will ignore folders with set version
+ cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN);
+ }
LLInventoryModelBackgroundFetch::getInstance()->start(folder.first);
}
else
@@ -355,7 +362,8 @@ void LLInventoryFetchItemsObserver::startFetch()
}
else if (cat->getViewerDescendentCount() <= folder.second.size())
{
- // start fetching whole folder since we need all items
+ // Start fetching whole folder since we need all items
+ // Drop version or use scheduleFolderFetch
cat->setVersion(LLViewerInventoryCategory::VERSION_UNKNOWN);
cat->fetch();