diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/DownloadContext.cc | 1 | ||||
| -rw-r--r-- | src/FileEntry.cc | 19 | ||||
| -rw-r--r-- | src/FileEntry.h | 3 |
3 files changed, 23 insertions, 0 deletions
diff --git a/src/DownloadContext.cc b/src/DownloadContext.cc index 3a47ed53..7f90627c 100644 --- a/src/DownloadContext.cc +++ b/src/DownloadContext.cc @@ -185,6 +185,7 @@ void DownloadContext::releaseRuntimeResource() { for(std::vector<SharedHandle<FileEntry> >::const_iterator i = fileEntries_.begin(), eoi = fileEntries_.end(); i != eoi; ++i) { + (*i)->putBackRequest(); (*i)->releaseRuntimeResource(); } } diff --git a/src/FileEntry.cc b/src/FileEntry.cc index 7d04e2dd..23721e7a 100644 --- a/src/FileEntry.cc +++ b/src/FileEntry.cc @@ -453,6 +453,25 @@ void FileEntry::releaseRuntimeResource() } namespace { +template<typename InputIterator> +void putBackUri +(std::deque<std::string>& uris, + InputIterator first, + InputIterator last) +{ + for(; first != last; ++first) { + uris.push_front((*first)->getUri()); + } +} +} // namespace + +void FileEntry::putBackRequest() +{ + putBackUri(uris_, requestPool_.begin(), requestPool_.end()); + putBackUri(uris_, inFlightRequests_.begin(), inFlightRequests_.end()); +} + +namespace { template<typename InputIterator, typename T> InputIterator findRequestByUri (InputIterator first, InputIterator last, const T& uri) diff --git a/src/FileEntry.h b/src/FileEntry.h index 029bd3e1..c77ca47a 100644 --- a/src/FileEntry.h +++ b/src/FileEntry.h @@ -231,6 +231,9 @@ public: void releaseRuntimeResource(); + // Push URIs in pooled or in-flight requests to the front of uris_. + void putBackRequest(); + void setOriginalName(const std::string& originalName); const std::string& getOriginalName() const |
