[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:
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user