summaryrefslogtreecommitdiff
path: root/indra/newview/llinventorymodel.cpp
diff options
context:
space:
mode:
authorAndrey Kleshchev <117672381+akleshchev@users.noreply.github.com>2026-07-21 19:12:39 +0300
committerAndrey Kleshchev <117672381+akleshchev@users.noreply.github.com>2026-07-21 22:42:36 +0300
commit2a75b42f164501e44ea2f35361812f87935c225e (patch)
tree4178b3139fd1e5b6d8ce0200d00b9212813f7b28 /indra/newview/llinventorymodel.cpp
parent9fce82688f0b9f972ea49f945505ba102bac639e (diff)
#6014 Speedup cleanupInventory
Diffstat (limited to 'indra/newview/llinventorymodel.cpp')
-rw-r--r--indra/newview/llinventorymodel.cpp20
1 files changed, 11 insertions, 9 deletions
diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp
index dbcade88c2..7a80c46c73 100644
--- a/indra/newview/llinventorymodel.cpp
+++ b/indra/newview/llinventorymodel.cpp
@@ -430,29 +430,31 @@ void LLInventoryModel::cleanupInventory()
{
LL_PROFILE_ZONE_SCOPED;
empty();
- // Deleting one observer might erase others from the list, so always pop off the front
- while (!mObservers.empty())
+ // Deleting one observer might trigger removeObserver, so use a local copy
+ if (!mObservers.empty())
{
- observer_list_t::iterator iter = mObservers.begin();
- LLInventoryObserver* observer = *iter;
- mObservers.erase(iter);
- delete observer;
+ observer_list_t observers_to_delete;
+ observers_to_delete.swap(mObservers);
+
+ for (LLInventoryObserver* observer : observers_to_delete)
+ {
+ delete observer;
+ }
}
if (mBulkFecthCallbackSlot.connected())
{
mBulkFecthCallbackSlot.disconnect();
}
- mObservers.clear();
// Run down HTTP transport
mHttpHeaders.reset();
mHttpOptions.reset();
delete mHttpRequestFG;
- mHttpRequestFG = NULL;
+ mHttpRequestFG = nullptr;
delete mHttpRequestBG;
- mHttpRequestBG = NULL;
+ mHttpRequestBG = nullptr;
}
// This is a convenience function to check if one object has a parent