From b68ccadd46d2ff094147ffd72318fd3a728c28eb Mon Sep 17 00:00:00 2001 From: Mike Antipov Date: Wed, 27 Jan 2010 14:24:37 +0200 Subject: Fixed critical bug EXT-4725 (Viewer crashes if try to call from 'Nearby voice' floater) - reason: LLContextMenu was not not deleted when LLPanelPeopleMenus::ContextMenu was destroyed. Associated callbacks were called by Menu Holder for last selected menu_item_call for destroyed LLParticipantList::LLParticipantListMenu - fix: added destruction of LLContextMenu when LLPanelPeopleMenus::ContextMenu is destructed. --HG-- branch : product-engine --- indra/newview/llpanelpeoplemenus.cpp | 9 +++++++++ indra/newview/llpanelpeoplemenus.h | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp index d9651a6045..501dac5dff 100644 --- a/indra/newview/llpanelpeoplemenus.cpp +++ b/indra/newview/llpanelpeoplemenus.cpp @@ -55,6 +55,15 @@ ContextMenu::ContextMenu() { } +ContextMenu::~ContextMenu() +{ + // do not forget delete LLContextMenu* mMenu. + // 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(); +} + void ContextMenu::show(LLView* spawning_view, const std::vector& uuids, S32 x, S32 y) { if (mMenu) diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h index 14ae2985f0..7251f6dbbd 100644 --- a/indra/newview/llpanelpeoplemenus.h +++ b/indra/newview/llpanelpeoplemenus.h @@ -45,7 +45,7 @@ class ContextMenu : public LLAvatarListItem::ContextMenu { public: ContextMenu(); - virtual ~ContextMenu() {} + virtual ~ContextMenu(); /** * Show the menu at specified coordinates. -- cgit v1.2.3