diff options
Diffstat (limited to 'cpp/src/IceStorm/TransientTopicManagerI.cpp')
-rw-r--r-- | cpp/src/IceStorm/TransientTopicManagerI.cpp | 13 |
1 files changed, 5 insertions, 8 deletions
diff --git a/cpp/src/IceStorm/TransientTopicManagerI.cpp b/cpp/src/IceStorm/TransientTopicManagerI.cpp index 28213fabaab..9099a7409ec 100644 --- a/cpp/src/IceStorm/TransientTopicManagerI.cpp +++ b/cpp/src/IceStorm/TransientTopicManagerI.cpp @@ -142,10 +142,11 @@ TransientTopicManagerImpl::reap() // // Lock sync(*this); // - map<string, TransientTopicImplPtr>::iterator i = _topics.begin(); - while(i != _topics.end()) + vector<string> reaped = _instance->topicReaper()->consumeReapedTopics(); + for(vector<string>::const_iterator p = reaped.begin(); p != reaped.end(); ++p) { - if(i->second->destroyed()) + map<string, TransientTopicImplPtr>::iterator i = _topics.find(*p); + if(i != _topics.end() && i->second->destroyed()) { Ice::Identity id = i->second->id(); TraceLevelsPtr traceLevels = _instance->traceLevels(); @@ -164,11 +165,7 @@ TransientTopicManagerImpl::reap() // Ignore } - _topics.erase(i++); - } - else - { - ++i; + _topics.erase(i); } } } |