[commit] r2679 - in trunk/GME: Gme/AutoRoute Mga

GMESRC Repository Notifications gme-commit at list.isis.vanderbilt.edu
Mon Jun 26 11:06:42 CDT 2017


Author: ksmyth
Date: Mon Jun 26 11:06:41 2017
New Revision: 2679

Log:
Fix uses of invalidated iterators

Modified:
   trunk/GME/Gme/AutoRoute/AutoRouterBox.cpp
   trunk/GME/Mga/MgaProject.h
   trunk/GME/Mga/MgaTerritory.cpp

Modified: trunk/GME/Gme/AutoRoute/AutoRouterBox.cpp
==============================================================================
--- trunk/GME/Gme/AutoRoute/AutoRouterBox.cpp	Mon Jun 26 11:06:38 2017	(r2678)
+++ trunk/GME/Gme/AutoRoute/AutoRouterBox.cpp	Mon Jun 26 11:06:41 2017	(r2679)
@@ -121,10 +121,10 @@
 
 	(*iter)->SetOwner(NULL);
 
-	ports.erase(iter);
-
 	delete *iter;
 
+	ports.erase(iter);
+
 	atomic = false;
 }
 

Modified: trunk/GME/Mga/MgaProject.h
==============================================================================
--- trunk/GME/Mga/MgaProject.h	Mon Jun 26 11:06:38 2017	(r2678)
+++ trunk/GME/Mga/MgaProject.h	Mon Jun 26 11:06:41 2017	(r2679)
@@ -305,12 +305,15 @@
 		COMTRY {
 			CMgaProject::clientcoll::iterator i = mgaproject->allclients.begin(), 
 											  end = mgaproject->allclients.end();
-			for(;i != end; ++i) {
-				if(*i == this) {
-					mgaproject->allclients.erase(i);
+			while (i != end) {
+				if (*i == this) {
+					i = mgaproject->allclients.erase(i);
 					active = false;
 					return S_OK;
 				}
+				else {
+					i++;
+				}
 			}
 		    ASSERT(("Client was not found among project clients",false));	
 		} COMCATCH(;);

Modified: trunk/GME/Mga/MgaTerritory.cpp
==============================================================================
--- trunk/GME/Mga/MgaTerritory.cpp	Mon Jun 26 11:06:38 2017	(r2678)
+++ trunk/GME/Mga/MgaTerritory.cpp	Mon Jun 26 11:06:41 2017	(r2679)
@@ -87,14 +87,17 @@
 		// this from allterrs, or MgaProject::~MgaProject will crash (as allterrs does not count references)
 		HRESULT hr = Flush();
 		CMgaProject::tercoll::iterator i = mgaproject->allterrs.begin(), end = mgaproject->allterrs.end();
-		for(;i != end; ++i) {
-			if(*i == this) {
-				mgaproject->allterrs.erase(i);
+		while (i != end) {
+			if (*i == this) {
+				i = mgaproject->allterrs.erase(i);
 				coreterr = NULL;   // release CoreTerritory object
 				handler = NULL;	// release sink
 				rwhandler = NULL;	// release sink
 				COMRETURN(hr);
 			}
+			else {
+				i++;
+			}
 			
 		}
 		ASSERT(false);	// not found among project territories
@@ -137,13 +140,17 @@
 		MARKSIG('8'); 
 		if(!handler) COMTHROW(E_MGA_TARGET_DESTROYED);
 		CMgaProject::addoncoll::iterator i = mgaproject->alladdons.begin(), end = mgaproject->alladdons.end();
-		for(;i != end; ++i) {
-			if(*i == this) {
-				mgaproject->alladdons.erase(i);
-				if(mgaproject->alladdons.empty()) mgaproject->reserveterr = NULL;   // release 
+		while (i != end) {
+			if (*i == this) {
+				i = mgaproject->alladdons.erase(i);
+				if (mgaproject->alladdons.empty())
+					mgaproject->reserveterr = NULL;   // release 
 				handler = NULL;	// release sink
 				return S_OK;
 			}
+			else {
+				i++;
+			}
 			
 		}
 		ASSERT(("addon not found among project addons",false));	


More information about the gme-commit mailing list