summaryrefslogtreecommitdiff
path: root/indra
diff options
context:
space:
mode:
authorLoren Shih <seraph@lindenlab.com>2010-01-11 14:15:32 -0500
committerLoren Shih <seraph@lindenlab.com>2010-01-11 14:15:32 -0500
commit79542fe8e7bd72b54ab8538284848935909bcba4 (patch)
tree543a5b76256c054f8644abd331daab86a90467d1 /indra
parent78cb4204a471129a3f3486d33cf115de816de36c (diff)
EXT-4154 : Memory leak from FetchObservers in AppearanceSP
Member observers of LLSidepanelAppearance are now deleted appropriately.
Diffstat (limited to 'indra')
-rw-r--r--indra/newview/llsidepanelappearance.cpp17
1 files changed, 9 insertions, 8 deletions
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
index 0ae62843ac..77a370cc3f 100644
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -62,6 +62,7 @@ public:
{
mPanel->inventoryFetched();
gInventory.removeObserver(this);
+ delete this;
}
private:
LLSidepanelAppearance *mPanel;
@@ -94,14 +95,12 @@ LLSidepanelAppearance::LLSidepanelAppearance() :
mLookInfo(NULL),
mCurrOutfitPanel(NULL)
{
- //LLUICtrlFactory::getInstance()->buildPanel(this, "panel_appearance.xml"); // Called from LLRegisterPanelClass::defaultPanelClassBuilder()
- mFetchWorn = new LLCurrentlyWornFetchObserver(this);
-
- mOutfitRenameWatcher = new LLWatchForOutfitRenameObserver(this);
}
LLSidepanelAppearance::~LLSidepanelAppearance()
{
+ gInventory.removeObserver(mOutfitRenameWatcher);
+ delete mOutfitRenameWatcher;
}
// virtual
@@ -156,6 +155,7 @@ BOOL LLSidepanelAppearance::postBuild()
mCurrOutfitPanel = getChild<LLPanel>("panel_currentlook");
+ mOutfitRenameWatcher = new LLWatchForOutfitRenameObserver(this);
gInventory.addObserver(mOutfitRenameWatcher);
return TRUE;
@@ -389,16 +389,17 @@ void LLSidepanelAppearance::fetchInventory()
}
}
- mFetchWorn->fetchItems(ids);
+ LLCurrentlyWornFetchObserver *fetch_worn = new LLCurrentlyWornFetchObserver(this);
+ fetch_worn->fetchItems(ids);
// If no items to be fetched, done will never be triggered.
// TODO: Change LLInventoryFetchObserver::fetchItems to trigger done() on this condition.
- if (mFetchWorn->isEverythingComplete())
+ if (fetch_worn->isEverythingComplete())
{
- mFetchWorn->done();
+ fetch_worn->done();
}
else
{
- gInventory.addObserver(mFetchWorn);
+ gInventory.addObserver(fetch_worn);
}
}