[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