summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/NodeI.cpp')
-rw-r--r--cpp/src/IceGrid/NodeI.cpp18
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
{
//