From: ThorstenB Date: Wed, 11 Apr 2012 22:03:16 +0000 (+0200) Subject: #738: crash when switching 2D panels X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=4348f17b8cae0416448b7af182949e731f2c7df1;p=flightgear.git #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. --- diff --git a/src/Main/fg_commands.cxx b/src/Main/fg_commands.cxx index 0e158d599..bf7bbdede 100644 --- a/src/Main/fg_commands.cxx +++ b/src/Main/fg_commands.cxx @@ -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; diff --git a/src/Main/globals.cxx b/src/Main/globals.cxx index 3f624f6bb..25eb5194b 100644 --- a/src/Main/globals.cxx +++ b/src/Main/globals.cxx @@ -188,7 +188,7 @@ FGGlobals::~FGGlobals() delete mag; delete matlib; delete route_mgr; - delete current_panel; + current_panel = NULL; delete ATC_mgr; diff --git a/src/Main/globals.hxx b/src/Main/globals.hxx index 01f728107..9be19ff66 100644 --- a/src/Main/globals.hxx +++ b/src/Main/globals.hxx @@ -119,7 +119,7 @@ private: FGRouteMgr *route_mgr; // 2D panel - FGPanel *current_panel; + SGSharedPtr current_panel; // ATC manager FGATCMgr *ATC_mgr; diff --git a/src/Model/panelnode.cxx b/src/Model/panelnode.cxx index 2c68f95c2..6657d2f75 100644 --- a/src/Model/panelnode.cxx +++ b/src/Model/panelnode.cxx @@ -153,7 +153,6 @@ void FGPanelNode::initWithPanel() FGPanelNode::~FGPanelNode() { - delete _panel; } osg::Matrix FGPanelNode::transformMatrix() const diff --git a/src/Model/panelnode.hxx b/src/Model/panelnode.hxx index 2551495f8..2ea9c0382 100644 --- a/src/Model/panelnode.hxx +++ b/src/Model/panelnode.hxx @@ -4,6 +4,7 @@ #include #include #include +#include class FGPanel; class SGPropertyNode; @@ -43,7 +44,7 @@ public: private: void initWithPanel(); - FGPanel* _panel; + SGSharedPtr _panel; bool _resizeToViewport;