summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src')
-rw-r--r--cpp/src/IceStorm/TopicManagerI.cpp47
1 files changed, 27 insertions, 20 deletions
diff --git a/cpp/src/IceStorm/TopicManagerI.cpp b/cpp/src/IceStorm/TopicManagerI.cpp
index f93288d4a74..1076b904244 100644
--- a/cpp/src/IceStorm/TopicManagerI.cpp
+++ b/cpp/src/IceStorm/TopicManagerI.cpp
@@ -163,26 +163,33 @@ TopicManagerI::reap()
TopicIMap::iterator i = _topicIMap.begin();
while(i != _topicIMap.end())
{
- if(i->second->destroyed())
- {
- if(_traceLevels->topicMgr > 0)
- {
- Ice::Trace out(_traceLevels->logger, _traceLevels->topicMgrCat);
- out << "Reaping " << i->first;
- }
-
- _topics.erase(i->first);
-
- Ice::Identity id;
- id.name = i->first;
- _topicAdapter->remove(id);
-
- _topicIMap.erase(i++);
- }
- else
- {
- ++i;
- }
+ if(i->second->destroyed())
+ {
+ if(_traceLevels->topicMgr > 0)
+ {
+ Ice::Trace out(_traceLevels->logger, _traceLevels->topicMgrCat);
+ out << "Reaping " << i->first;
+ }
+
+ _topics.erase(i->first);
+
+ try
+ {
+ Ice::Identity id;
+ id.name = i->first;
+ _topicAdapter->remove(id);
+ }
+ catch(const Ice::ObjectAdapterDeactivatedException&)
+ {
+ // Ignore
+ }
+
+ _topicIMap.erase(i++);
+ }
+ else
+ {
+ ++i;
+ }
}
}