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-enginemeow-7.2.2
parent
10cbb9ea27
commit
efeaba0acd
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,6 +62,7 @@ protected:
|
|||
|
||||
std::vector<LLUUID> mUUIDs;
|
||||
LLContextMenu* mMenu;
|
||||
LLHandle<LLView> mMenuHandle;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue