diff options
Diffstat (limited to 'indra')
| -rw-r--r-- | indra/llui/llfloater.cpp | 8 | ||||
| -rw-r--r-- | indra/llui/llfloater.h | 2 | ||||
| -rw-r--r-- | indra/newview/llmoveview.cpp | 10 | ||||
| -rw-r--r-- | indra/newview/llmoveview.h | 2 | 
4 files changed, 20 insertions, 2 deletions
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp index 39a6855273..22d6f6ca52 100644 --- a/indra/llui/llfloater.cpp +++ b/indra/llui/llfloater.cpp @@ -451,6 +451,14 @@ void LLFloater::enableResizeCtrls(bool enable)  	}  } +void LLFloater::destroy() +{ +	// LLFloaterReg should be synchronized with "dead" floater to avoid returning dead instance before +	// it was deleted via LLMortician::updateClass(). See EXT-8458. +	LLFloaterReg::removeInstance(mInstanceName, mKey); +	die(); +} +  // virtual  LLFloater::~LLFloater()  { diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h index 3ea035777c..42f422f91c 100644 --- a/indra/llui/llfloater.h +++ b/indra/llui/llfloater.h @@ -308,7 +308,7 @@ protected:  	BOOL			getAutoFocus() const { return mAutoFocus; }  	LLDragHandle*	getDragHandle() const { return mDragHandle; } -	void			destroy() { die(); } // Don't call this directly.  You probably want to call closeFloater() +	void			destroy(); // Don't call this directly.  You probably want to call closeFloater()  	virtual	void	onClickCloseBtn(); diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp index 6ae4a5e5e4..fc41137686 100644 --- a/indra/newview/llmoveview.cpp +++ b/indra/newview/llmoveview.cpp @@ -83,6 +83,16 @@ LLFloaterMove::LLFloaterMove(const LLSD& key)  {  } +LLFloaterMove::~LLFloaterMove() +{ +	// Ensure LLPanelStandStopFlying panel is not among floater's children. See EXT-8458. +	setVisible(FALSE); + +	// Otherwise it can be destroyed and static pointer in LLPanelStandStopFlying::getInstance() will become invalid. +	// Such situation was possible when LLFloaterReg returns "dead" instance of floater. +	// Should not happen after LLFloater::destroy was modified to remove "dead" instances from LLFloaterReg. +} +  // virtual  BOOL LLFloaterMove::postBuild()  { diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h index d463861188..43b0342744 100644 --- a/indra/newview/llmoveview.h +++ b/indra/newview/llmoveview.h @@ -51,7 +51,7 @@ class LLFloaterMove  private:  	LLFloaterMove(const LLSD& key); -	~LLFloaterMove() {} +	~LLFloaterMove();  public:  	/*virtual*/	BOOL	postBuild();  | 
