[core] Fix image requests for already obtained images

Before this change, repeated request for an already
obtained image was erroneously treated as pending.
This commit is contained in:
Mikhail Pozdnyakov
2019-10-17 15:13:30 +03:00
parent a8558379db
commit 057048b293
2 changed files with 7 additions and 5 deletions

View File

@@ -189,9 +189,12 @@ void ImageManager::checkMissingAndNotify(ImageRequestor& requestor, const ImageR
auto existingRequestorsIt = requestedImages.find(missingImage);
if (existingRequestorsIt != requestedImages.end()) { // Already asked client about this image.
if (!existingRequestorsIt->second.empty()) { // Still waiting for the client response.
existingRequestorsIt->second.emplace(requestorPtr);
requestor.addPendingRequest(missingImage);
std::set<ImageRequestor*>& existingRequestors = existingRequestorsIt->second;
if (!existingRequestors.empty() &&
(*existingRequestors.begin())
->hasPendingRequest(missingImage)) { // Still waiting for the client response for this image.
requestorPtr->addPendingRequest(missingImage);
existingRequestors.emplace(requestorPtr);
continue;
}
// Unlike icons, pattern changes are not caught

View File

@@ -73,9 +73,8 @@ public:
virtual void onImagesAvailable(ImageMap icons, ImageMap patterns, ImageVersionMap versionMap, uint64_t imageCorrelationID) = 0;
void addPendingRequest(const std::string& imageId) { pendingRequests.insert(imageId); }
bool hasPendingRequest(const std::string& imageId) const { return pendingRequests.count(imageId); }
bool hasPendingRequests() const { return !pendingRequests.empty(); }
void removePendingRequest(const std::string& imageId) { pendingRequests.erase(imageId); }
private: