From 72e475dfdeaa4a87dff0eef994e7814e94c40363 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 28 Feb 2010 16:04:52 +0000 Subject: 2010-03-01 Tatsuhiro Tsujikawa Avoid to calculate end() iterator in each loop. std::deque is particularly slow. Make sure that recalculate end iterator if element is erased during loop. --- src/UTMetadataRequestTracker.cc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/UTMetadataRequestTracker.cc') diff --git a/src/UTMetadataRequestTracker.cc b/src/UTMetadataRequestTracker.cc index fd6da586..33380a8c 100644 --- a/src/UTMetadataRequestTracker.cc +++ b/src/UTMetadataRequestTracker.cc @@ -68,8 +68,8 @@ std::vector UTMetadataRequestTracker::removeTimeoutEntry() { std::vector indexes; const time_t TIMEOUT = 20; - for(std::vector::iterator i = _trackedRequests.begin(); - i != _trackedRequests.end();) { + for(std::vector::iterator i = _trackedRequests.begin(), + eoi = _trackedRequests.end(); i != eoi;) { if((*i).elapsed(TIMEOUT)) { if(_logger->debug()) { _logger->debug("ut_metadata request timeout. index=%lu", @@ -77,6 +77,7 @@ std::vector UTMetadataRequestTracker::removeTimeoutEntry() } indexes.push_back((*i)._index); i = _trackedRequests.erase(i); + eoi = _trackedRequests.end(); } else { ++i; } @@ -97,8 +98,8 @@ size_t UTMetadataRequestTracker::avail() const std::vector UTMetadataRequestTracker::getAllTrackedIndex() const { std::vector indexes; - for(std::vector::const_iterator i = _trackedRequests.begin(); - i != _trackedRequests.end(); ++i) { + for(std::vector::const_iterator i = _trackedRequests.begin(), + eoi = _trackedRequests.end(); i != eoi; ++i) { indexes.push_back((*i)._index); } return indexes; -- cgit