aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/SkImageCacherator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/SkImageCacherator.cpp')
-rw-r--r--src/core/SkImageCacherator.cpp8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/core/SkImageCacherator.cpp b/src/core/SkImageCacherator.cpp
index bdcd64f56d..b138853e61 100644
--- a/src/core/SkImageCacherator.cpp
+++ b/src/core/SkImageCacherator.cpp
@@ -27,6 +27,10 @@ SkImageCacherator* SkImageCacherator::NewFromGenerator(SkImageGenerator* gen,
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 @@ SkImageCacherator* SkImageCacherator::NewFromGenerator(SkImageGenerator* gen,
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);
}