diff --git a/src/mbgl/renderer/image_manager.cpp b/src/mbgl/renderer/image_manager.cpp index 692747bca41..0d2420edc16 100644 --- a/src/mbgl/renderer/image_manager.cpp +++ b/src/mbgl/renderer/image_manager.cpp @@ -58,14 +58,12 @@ void ImageManager::getImages(ImageRequestor& requestor, ImageDependencies depend // Otherwise, delay notification until the sprite is loaded. At that point, if any of the // dependencies are still unavailable, we'll just assume they are permanently missing. bool hasAllDependencies = true; - if (!isLoaded()) { - for (const auto& dependency : dependencies) { - if (images.find(dependency) == images.end()) { - hasAllDependencies = false; - } + for (const auto& dependency : dependencies) { + if (images.find(dependency) == images.end()) { + hasAllDependencies = false; } } - if (isLoaded() || hasAllDependencies) { + if (isLoaded() && hasAllDependencies) { notify(requestor, dependencies); } else { requestors.emplace(&requestor, std::move(dependencies)); diff --git a/test/renderer/image_manager.test.cpp b/test/renderer/image_manager.test.cpp index 5e6da5c0054..a98fd747785 100644 --- a/test/renderer/image_manager.test.cpp +++ b/test/renderer/image_manager.test.cpp @@ -134,14 +134,15 @@ TEST(ImageManager, NotifiesRequestorWhenSpriteIsLoaded) { TEST(ImageManager, NotifiesRequestorImmediatelyIfDependenciesAreSatisfied) { ImageManager imageManager; StubImageRequestor requestor; - bool notified = false; + uint64_t imagesAvailableCount = 0; requestor.imagesAvailable = [&] (ImageMap) { - notified = true; + ++imagesAvailableCount; }; + imageManager.setLoaded(true); imageManager.addImage(makeMutable("one", PremultipliedImage({ 16, 16 }), 2)); imageManager.getImages(requestor, {"one"}); - ASSERT_TRUE(notified); + ASSERT_EQ(imagesAvailableCount, 1u); }