diff options
-rw-r--r-- | src/core/SkImageCacherator.cpp | 8 |
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); } |