]> git.mxchange.org Git - flightgear.git/commitdiff
Reset: sound manager can be shutdown cleanly
authorJames Turner <zakalawe@mac.com>
Tue, 5 Nov 2013 05:32:14 +0000 (05:32 +0000)
committerJames Turner <zakalawe@mac.com>
Tue, 12 Nov 2013 22:50:18 +0000 (22:50 +0000)
src/Sound/soundmanager.cxx
src/Sound/soundmanager.hxx

index 9ae7e3aed8aed49f121a8ee021f8af0f5d2df81a..a4c197ce9c8da8ad5177005459af9aba99aa2192 100644 (file)
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
 //
 
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
 #include <simgear/sound/soundmgr_openal.hxx>
 
 #include "soundmanager.hxx"
@@ -50,8 +54,6 @@ FGSoundManager::FGSoundManager()
     _enabled(false),
     _listener(new Listener(this))
 {
-    SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true);
-    scenery_loaded->addChangeListener(_listener);
 }
 
 FGSoundManager::~FGSoundManager()
@@ -78,9 +80,20 @@ void FGSoundManager::init()
     _viewYoffset      = _currentView->getNode("y-offset-m", true);
     _viewZoffset      = _currentView->getNode("z-offset-m", true);
 
+    SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true);
+    scenery_loaded->addChangeListener(_listener.get());
+
     reinit();
 }
 
+void FGSoundManager::shutdown()
+{
+    SGPropertyNode_ptr scenery_loaded = fgGetNode("sim/sceneryloaded", true);
+    scenery_loaded->removeChangeListener(_listener.get());
+    
+    SGSoundMgr::shutdown();
+}
+
 void FGSoundManager::reinit()
 {
     _is_initialized = false;
index af7f19bc7da66167dc8024cddc20574617813a02..7bec8b8f587330c64d3f4f042d2abf80b5c5ed73 100644 (file)
 #ifndef __FG_SOUNDMGR_HXX
 #define __FG_SOUNDMGR_HXX 1
 
-#ifdef HAVE_CONFIG_H
-#  include <config.h>
-#endif
-
+#include <memory>
 #include <simgear/props/props.hxx>
 #include <simgear/structure/subsystem_mgr.hxx>
 #include <simgear/sound/soundmgr_openal.hxx>
@@ -36,9 +33,10 @@ class FGSoundManager : public SGSoundMgr
 {
 public:
     FGSoundManager();
-    ~FGSoundManager();
+    virtual ~FGSoundManager();
 
     void init(void);
+    virtual void shutdown();
     void update(double dt);
     void reinit(void);
 
@@ -54,7 +52,7 @@ private:
     SGPropertyNode_ptr _viewPosLon, _viewPosLat, _viewPosElev;
     SGPropertyNode_ptr _velocityNorthFPS, _velocityEastFPS, _velocityDownFPS;
     SGPropertyNode_ptr _viewXoffset, _viewYoffset, _viewZoffset;
-    Listener* _listener;
+    std::auto_ptr<Listener> _listener;
 };
 #else
 #include "Main/fg_props.hxx"