]> git.mxchange.org Git - flightgear.git/commitdiff
Fix some leaks on reset
authorJames Turner <zakalawe@mac.com>
Thu, 13 Mar 2014 18:18:23 +0000 (18:18 +0000)
committerJames Turner <zakalawe@mac.com>
Thu, 13 Mar 2014 18:19:13 +0000 (18:19 +0000)
- tilecache 'clear_cache' is poorly named, ensure the destructor
  really deletes all outstanding entries.

src/Main/fg_init.cxx
src/Scenery/SceneryPager.cxx
src/Scenery/SceneryPager.hxx
src/Scenery/tilecache.cxx

index 2b293ce7f42de14ab46f5df1d8576d097f5be83f..06404440bbca61925a24aa0797feb5492f3ddb9b 100644 (file)
 #include <Navaids/navdb.hxx>
 #include <Navaids/navlist.hxx>
 #include <Scenery/scenery.hxx>
+#include <Scenery/SceneryPager.hxx>
 #include <Scenery/tilemgr.hxx>
 #include <Scripting/NasalSys.hxx>
 #include <Sound/voice.hxx>
@@ -982,6 +983,7 @@ void fgStartNewReset()
     // access the scenery object
     globals->set_tile_mgr(NULL);
     globals->set_scenery(NULL);
+    FGScenery::getPagerSingleton()->clearRequests();
     flightgear::CameraGroup::setDefault(NULL);
     
     // don't cancel the pager until after shutdown, since AIModels (and
index 9e128787eb6192bbae81e32d2b491d5a5298ba8f..892b7bc1aceb0289410dc314ce054e214d06629c 100644 (file)
@@ -42,6 +42,12 @@ SceneryPager::~SceneryPager()
 {
 }
 
+void SceneryPager::clearRequests()
+{
+    _pagerRequests.clear();
+    _deleteRequests.clear();
+}
+
 void SceneryPager::queueRequest(const std::string& fileName, Group* group,
                                 float priority, FrameStamp* frameStamp,
                                 ref_ptr<Referenced>& databaseRequest,
index d8f519a1bc3960255701c0ea058240060efddcb7..b225ecfe237c23c53674442fa040943f67d65c62 100644 (file)
@@ -47,6 +47,8 @@ public:
     // lock on the delete list.
     void queueDeleteRequest(osg::ref_ptr<osg::Object>& objptr);
     virtual void signalEndFrame();
+    
+    void clearRequests();
 protected:
     // Queue up file requests until the end of the frame
     struct PagerRequest
index d82d2e304eda8690bea119230f7f1086b9109698..d25c3878062430f7787ed23cf79ea2d03600bd98 100644 (file)
@@ -38,8 +38,14 @@ TileCache::TileCache( void ) :
 }
 
 
-TileCache::~TileCache( void ) {
-    clear_cache();
+TileCache::~TileCache( void )
+{
+    tile_map_iterator it = tile_cache.begin();
+    for (; it != tile_cache.end(); ++it) {
+        TileEntry* tile = it->second;
+        tile->removeFromSceneGraph();
+        delete tile;
+    }
 }