Consequences of root cause:
Static pointer to LLPanelStandStopFlying in LLPanelStandStopFlying::getInstance() becomes invalid when the instance of the LLPanelStandStopFlying is a child of floater while it is destroying.
Next usage of that pointed cause a crash.
Root Cause:
1. LLFloater::closeFloater sets floater invisible and marks floater as "dead" but does not destroy it.
2. But that instance was still in LLFloaterReg map. It is removed in LLFloater's destructor.
3. So it was possible on low fps to get "dead" floater with LLFloaterReg, LLFloaterMove in this case.
4. Then LLMortician deleted floater instance shown on previous step.
Call of setVisible(false) from the LLFloater's destructor does not call overridden LLFloaterMove's method (which is expected behavior.)
So, child panel LLPanelStandStopFlying was not re-parented to Main View and was destroyed with LLFloaterMove.
That leaded to the "Top Reason" described above.
FIX:
1. Ensure that LLPanelStandStopFlying is not a child of LLFloaterMove on its destroying.
2. Synchronized removing of a floater instance from the LLFloaterReg when it is marked as "dead".
Note: both changes fixes this bug independently, but I included both of them into result patch to avoid similar but in the future.
Reviewed by Vadim Savchuk at https://codereview.productengine.com/secondlife/r/781/
--HG--
branch : product-engine
Fixed code calculating title buttons rectangle, LLRect::isValid() does not indicate uninitialized rectangle, as a result rectangle was not properly initialized and had negative width.
Fixed title width.
Reviewed by Mike Antipov - https://codereview.productengine.com/secondlife/r/194/
--HG--
branch : product-engine
Changed the way floater title is reshaped. Calculations takes title buttons into account instead of using hardcoded values.
--HG--
branch : product-engine
Added customizable background image overlay color to control background transparency. Default overlay color is White, as before.
--HG--
branch : product-engine
This involved tracking the torn-off state of a floater, which we
apparently weren't doing before. Also, making sure that we update
the title bar buttons when the floater changes torn-off state.
The script error floater may be the only floater left that uses the
old-style tearoff functionality, but at least it should behave a
little better now in terms of help "?" buttons.
Code to set default floater position to top-left was causing incorrect
floater height computation when floater XML specified a bottom coordinate.
Reviewed with Callum.