diff options
Diffstat (limited to 'cpp/src')
-rw-r--r-- | cpp/src/IceStorm/TopicManagerI.cpp | 47 |
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; + } } } |