diff options
Diffstat (limited to 'cpp/src/IceGrid/NodeI.cpp')
-rw-r--r-- | cpp/src/IceGrid/NodeI.cpp | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/cpp/src/IceGrid/NodeI.cpp b/cpp/src/IceGrid/NodeI.cpp index 3a6139f2b34..2b428ff04af 100644 --- a/cpp/src/IceGrid/NodeI.cpp +++ b/cpp/src/IceGrid/NodeI.cpp @@ -308,18 +308,19 @@ NodeI::patch(const string& application, try { + set<ServerIPtr>::iterator s = servers.begin(); vector<string> running; - set<ServerIPtr>::const_iterator s; - for(s = servers.begin(); s != servers.end(); ++s) + while(s != servers.end()) { if(!(*s)->startPatch(shutdown)) { running.push_back((*s)->getId()); + servers.erase(s++); + } + else + { + ++s; } - } - for(s = servers.begin(); s != servers.end(); ++s) - { - (*s)->waitForPatch(); } if(!running.empty()) @@ -337,6 +338,11 @@ NodeI::patch(const string& application, throw ex; } + for(s = servers.begin(); s != servers.end(); ++s) + { + (*s)->waitForPatch(); + } + try { // |