Merge remote-tracking branch 'origin/1369-alternate-fix'

This commit is contained in:
John Firebaugh
2015-05-08 11:20:10 -07:00
4 changed files with 56 additions and 3 deletions

View File

@@ -85,7 +85,7 @@ void DefaultFileSource::Impl::add(Request* req) {
return;
}
request = &pending.emplace(resource, DefaultFileRequest(resource)).first->second;
request = &pending.emplace(resource, resource).first->second;
request->observers.insert(req);
if (cache) {
@@ -101,9 +101,11 @@ void DefaultFileSource::Impl::startCacheRequest(const Resource& resource) {
cache->get(resource, [this, resource](std::unique_ptr<Response> response) {
DefaultFileRequest* request = find(resource);
if (!request) {
if (!request || request->request) {
// There is no request for this URL anymore. Likely, the request was canceled
// before we got around to process the cache result.
// The second possibility is that a request has already been started by another cache
// request. In this case, we don't have to do anything either.
return;
}

View File

@@ -19,8 +19,14 @@ struct DefaultFileRequest {
std::set<Request*> observers;
RequestBase* request = nullptr;
DefaultFileRequest(const Resource& resource_)
inline DefaultFileRequest(const Resource& resource_)
: resource(resource_) {}
// Make it movable-only
DefaultFileRequest(const DefaultFileRequest&) = delete;
inline DefaultFileRequest(DefaultFileRequest&&) = default;
DefaultFileRequest& operator=(const DefaultFileRequest&) = delete;
inline DefaultFileRequest& operator=(DefaultFileRequest&&) = default;
};
class DefaultFileSource::Impl {