From: ehofman <ehofman>
Date: Tue, 5 Jul 2005 18:53:16 +0000 (+0000)
Subject: Another update, the previous one could crash if you leave the surrounding tiles ... 
X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=6b6a27e8498ec2fa4b4a990691527ae94d358cd2;p=simgear.git

Another update, the previous one could crash if you leave the surrounding tiles (try Set aircraft in air and choose a distant airport).
---

diff --git a/simgear/scene/model/shadowvolume.cxx b/simgear/scene/model/shadowvolume.cxx
index ed1b85a8..844ddddb 100644
--- a/simgear/scene/model/shadowvolume.cxx
+++ b/simgear/scene/model/shadowvolume.cxx
@@ -786,10 +786,10 @@ SGShadowVolume::SGShadowVolume() :
 
 SGShadowVolume::~SGShadowVolume() {
 	SceneryObject_map::iterator iSceneryObject;
-	for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end();  ) {
+	for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); iSceneryObject++ ) {
 		delete iSceneryObject->second;
-		sceneryObjects.erase( iSceneryObject );
 	}
+	sceneryObjects.clear();
 }
 
 void SGShadowVolume::init(SGPropertyNode *sim_rendering_options) {
@@ -815,14 +815,15 @@ void SGShadowVolume::init(SGPropertyNode *sim_rendering_options) {
 void SGShadowVolume::startOfFrame(void) {
 }
 void SGShadowVolume::deleteOccluderFromTile(ssgBranch *tile) {
-	SceneryObject_map::iterator iSceneryObject;
-	for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end();  ) {
+	SceneryObject_map::iterator iSceneryObject, iPrevious;
+	iPrevious = sceneryObjects.begin();
+	for(iSceneryObject = sceneryObjects.begin() ; iSceneryObject != sceneryObjects.end(); iSceneryObject++ ) {
 		if( iSceneryObject->second->tile == tile ) {
 			delete iSceneryObject->second;
 			sceneryObjects.erase( iSceneryObject );
+			iSceneryObject = iPrevious;
 		}
-		else 
-			iSceneryObject++;
+		iPrevious = iSceneryObject;
 	}
 }