summaryrefslogtreecommitdiff
path: root/cpp/src
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2003-04-17 16:36:09 +0000
committerMark Spruiell <mes@zeroc.com>2003-04-17 16:36:09 +0000
commit7310d319f69c3988f2bf9af1a67ba52d06f72603 (patch)
tree82965be4dc6faf2bc7f8e3be1c89d4ebd59f4f5d /cpp/src
parentMacro reorg/cleanup (diff)
downloadice-7310d319f69c3988f2bf9af1a67ba52d06f72603.tar.bz2
ice-7310d319f69c3988f2bf9af1a67ba52d06f72603.tar.xz
ice-7310d319f69c3988f2bf9af1a67ba52d06f72603.zip
bug fix for service shutdown
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;
+ }
}
}