diff options
Diffstat (limited to 'cpp/src/IceGrid/Topics.cpp')
-rw-r--r-- | cpp/src/IceGrid/Topics.cpp | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/cpp/src/IceGrid/Topics.cpp b/cpp/src/IceGrid/Topics.cpp index 41427244449..2ee3b28361b 100644 --- a/cpp/src/IceGrid/Topics.cpp +++ b/cpp/src/IceGrid/Topics.cpp @@ -110,12 +110,19 @@ NodeObserverTopic::updateServer(const string& node, const ServerDynamicInfo& ser { if(p->name == server.name) { - *p = server; + if(server.state == Destroyed || server.state == Inactive) + { + servers.erase(p); + } + else + { + *p = server; + } break; } ++p; } - if(p == servers.end()) + if(server.state != Destroyed && server.state != Inactive && p == servers.end()) { servers.push_back(server); } @@ -137,12 +144,19 @@ NodeObserverTopic::updateAdapter(const string& node, const AdapterDynamicInfo& a { if(p->id == adapter.id) { - *p = adapter; + if(adapter.proxy) + { + *p = adapter; + } + else + { + adapters.erase(p); + } break; } ++p; } - if(p == adapters.end()) + if(adapter.proxy && p == adapters.end()) { adapters.push_back(adapter); } |