summaryrefslogtreecommitdiff
path: root/indra/newview/llpanelpeoplemenus.cpp
diff options
context:
space:
mode:
authorMike Antipov <mantipov@productengine.com>2010-01-29 15:48:50 +0200
committerMike Antipov <mantipov@productengine.com>2010-01-29 15:48:50 +0200
commitefeaba0acd9b40d50a32e4c728489231fbaac7e8 (patch)
treeb7c7ff6fe0572950e502d966795d4630110aa0e4 /indra/newview/llpanelpeoplemenus.cpp
parent10cbb9ea27e8e47a235efece1b30365b7f00e038 (diff)
Fixed normal bug EXT-4762 ( Crash on exit from viewer in LLPanelPeopleMenus::ContextMenu)
- reason: attempt to delete instance of the LLContextMenu from the LLPanelPeopleMenus::ContextMenu after it was deleted by menu holder on viewer exit. - fix: check if menu is not dead via stored LLHandle of the menu before deleting. --HG-- branch : product-engine
Diffstat (limited to 'indra/newview/llpanelpeoplemenus.cpp')
-rw-r--r--indra/newview/llpanelpeoplemenus.cpp10
1 files changed, 9 insertions, 1 deletions
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
index 501dac5dff..470cfca8fe 100644
--- a/indra/newview/llpanelpeoplemenus.cpp
+++ b/indra/newview/llpanelpeoplemenus.cpp
@@ -61,7 +61,14 @@ ContextMenu::~ContextMenu()
// It can have registered Enable callbacks which are called from the LLMenuHolderGL::draw()
// via selected item (menu_item_call) by calling LLMenuItemCallGL::buildDrawLabel.
// we can have a crash via using callbacks of deleted instance of ContextMenu. EXT-4725
- if (mMenu) mMenu->die();
+
+ // menu holder deletes its menus on viewer exit, so we have no way to determine if instance
+ // of mMenu has already been deleted except of using LLHandle. EXT-4762.
+ if (!mMenuHandle.isDead())
+ {
+ mMenu->die();
+ mMenu = NULL;
+ }
}
void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids, S32 x, S32 y)
@@ -86,6 +93,7 @@ void ContextMenu::show(LLView* spawning_view, const std::vector<LLUUID>& uuids,
std::copy(uuids.begin(), uuids.end(), mUUIDs.begin());
mMenu = createMenu();
+ mMenuHandle = mMenu->getHandle();
mMenu->show(x, y);
LLMenuGL::showPopup(spawning_view, mMenu, x, y);
}