#738: crash when switching 2D panels
FGPanelNode doesn't always own its "_panel" object - so it's not ok to always delete it. Use ref-counting/smart-pointers instead.
This commit is contained in:
parent
2ce5b5276f
commit
4348f17b8c
5 changed files with 4 additions and 5 deletions
|
@ -414,7 +414,6 @@ do_panel_load (const SGPropertyNode * arg)
|
|||
}
|
||||
SG_LOG(SG_INPUT, SG_INFO, "Loaded new panel from " << panel_path);
|
||||
globals->get_current_panel()->unbind();
|
||||
delete globals->get_current_panel();
|
||||
globals->set_current_panel( new_panel );
|
||||
globals->get_current_panel()->bind();
|
||||
return true;
|
||||
|
|
|
@ -188,7 +188,7 @@ FGGlobals::~FGGlobals()
|
|||
delete mag;
|
||||
delete matlib;
|
||||
delete route_mgr;
|
||||
delete current_panel;
|
||||
current_panel = NULL;
|
||||
|
||||
delete ATC_mgr;
|
||||
|
||||
|
|
|
@ -119,7 +119,7 @@ private:
|
|||
FGRouteMgr *route_mgr;
|
||||
|
||||
// 2D panel
|
||||
FGPanel *current_panel;
|
||||
SGSharedPtr<FGPanel> current_panel;
|
||||
|
||||
// ATC manager
|
||||
FGATCMgr *ATC_mgr;
|
||||
|
|
|
@ -153,7 +153,6 @@ void FGPanelNode::initWithPanel()
|
|||
|
||||
FGPanelNode::~FGPanelNode()
|
||||
{
|
||||
delete _panel;
|
||||
}
|
||||
|
||||
osg::Matrix FGPanelNode::transformMatrix() const
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
#include <osg/Vec3>
|
||||
#include <osg/Matrix>
|
||||
#include <osg/Drawable>
|
||||
#include <simgear/structure/SGSharedPtr.hxx>
|
||||
|
||||
class FGPanel;
|
||||
class SGPropertyNode;
|
||||
|
@ -43,7 +44,7 @@ public:
|
|||
private:
|
||||
void initWithPanel();
|
||||
|
||||
FGPanel* _panel;
|
||||
SGSharedPtr<FGPanel> _panel;
|
||||
|
||||
bool _resizeToViewport;
|
||||
|
||||
|
|
Loading…
Reference in a new issue