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