From 4a41e3499d4c225795c8776e58b10c6dbc494e50 Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Fri, 16 Sep 2016 15:43:53 +0200 Subject: [PATCH] [core] OnlineFileSource - prevent double scheduling of requests --- platform/default/online_file_source.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/platform/default/online_file_source.cpp b/platform/default/online_file_source.cpp index 049cbf5f8de..00c66f004da 100644 --- a/platform/default/online_file_source.cpp +++ b/platform/default/online_file_source.cpp @@ -77,6 +77,7 @@ class OnlineFileSource::Impl { pendingRequestsMap.erase(it); } } + assert(pendingRequestsMap.size() == pendingRequestsList.size()); } void activateOrQueueRequest(OnlineFileRequest* request) { @@ -94,6 +95,7 @@ class OnlineFileSource::Impl { void queueRequest(OnlineFileRequest* request) { auto it = pendingRequestsList.insert(pendingRequestsList.end(), request); pendingRequestsMap.emplace(request, std::move(it)); + assert(pendingRequestsMap.size() == pendingRequestsList.size()); } void activateRequest(OnlineFileRequest* request) { @@ -104,6 +106,7 @@ class OnlineFileSource::Impl { request->request.reset(); request->completed(response); }); + assert(pendingRequestsMap.size() == pendingRequestsList.size()); } void activatePendingRequest() { @@ -117,6 +120,15 @@ class OnlineFileSource::Impl { pendingRequestsMap.erase(request); activateRequest(request); + assert(pendingRequestsMap.size() == pendingRequestsList.size()); + } + + bool isPending(OnlineFileRequest* request) { + return pendingRequestsMap.find(request) != pendingRequestsMap.end(); + } + + bool isActive(OnlineFileRequest* request) { + return activeRequests.find(request) != activeRequests.end(); } private: @@ -238,7 +250,7 @@ Timestamp interpolateExpiration(const Timestamp& current, } void OnlineFileRequest::schedule(optional expires) { - if (request) { + if (impl.isPending(this) || impl.isActive(this)) { // There's already a request in progress; don't start another one. return; }