From c0abbb6a648778f2acfaabd4e70763c0e31f7790 Mon Sep 17 00:00:00 2001 From: Steve Bennetts Date: Mon, 26 Oct 2009 23:41:18 -0700 Subject: Fixed a crash on exit in gInventory destructor. --- indra/newview/llinventorymodel.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'indra/newview/llinventorymodel.cpp') diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index d5a527773c..e49be83fbc 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -175,13 +175,20 @@ LLInventoryModel::LLInventoryModel() // Destroys the object LLInventoryModel::~LLInventoryModel() +{ + cleanupInventory(); +} + +void LLInventoryModel::cleanupInventory() { empty(); for (observer_list_t::iterator iter = mObservers.begin(); - iter != mObservers.end(); ++iter) + iter != mObservers.end(); ) { - delete *iter; + LLInventoryObserver* observer = *iter++; + delete observer; } + mObservers.clear(); } // This is a convenience function to check if one object has a parent -- cgit v1.2.3 From cadc8dc4a3c6f5d7a431e671857d09e0b5eac4a4 Mon Sep 17 00:00:00 2001 From: Steve Bennetts Date: Tue, 27 Oct 2009 16:31:07 -0700 Subject: Fix for gInventory cleanup on shutdown, includes making LLNavigationBar a LLSingleton and explicitly destroying it with the rest of the UI. --- indra/newview/llinventorymodel.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) (limited to 'indra/newview/llinventorymodel.cpp') diff --git a/indra/newview/llinventorymodel.cpp b/indra/newview/llinventorymodel.cpp index e49be83fbc..1d7cbde0d5 100644 --- a/indra/newview/llinventorymodel.cpp +++ b/indra/newview/llinventorymodel.cpp @@ -182,10 +182,12 @@ LLInventoryModel::~LLInventoryModel() void LLInventoryModel::cleanupInventory() { empty(); - for (observer_list_t::iterator iter = mObservers.begin(); - iter != mObservers.end(); ) + // Deleting one observer might erase others from the list, so always pop off the front + while (!mObservers.empty()) { - LLInventoryObserver* observer = *iter++; + observer_list_t::iterator iter = mObservers.begin(); + LLInventoryObserver* observer = *iter; + mObservers.erase(iter); delete observer; } mObservers.clear(); -- cgit v1.2.3