we must own/free the generator, even if we fail to return a cacherator
BUG=skia:4332
Review URL: https://codereview.chromium.org/1345523002
diff --git a/src/core/SkImageCacherator.cpp b/src/core/SkImageCacherator.cpp
index bdcd64f..b138853 100644
--- a/src/core/SkImageCacherator.cpp
+++ b/src/core/SkImageCacherator.cpp
@@ -27,6 +27,10 @@
if (!gen) {
return nullptr;
}
+
+ // We are required to take ownership of gen, regardless of if we return a cacherator or not
+ SkAutoTDelete<SkImageGenerator> genHolder(gen);
+
const SkImageInfo& info = gen->getInfo();
if (info.isEmpty()) {
return nullptr;
@@ -46,6 +50,10 @@
subset = &bounds;
}
+ // Now that we know we can hand-off the generator (to be owned by the cacherator) we can
+ // release our holder. (we DONT want to delete it here anymore)
+ genHolder.detach();
+
return new SkImageCacherator(gen, gen->getInfo().makeWH(subset->width(), subset->height()),
SkIPoint::Make(subset->x(), subset->y()), uniqueID);
}