diff options
author | 2015-09-14 09:59:28 -0700 | |
---|---|---|
committer | 2015-09-14 09:59:28 -0700 | |
commit | 3a100d3e4de7a640d558352c544724801ab842f3 (patch) | |
tree | 8b6a50d9451b1561ee36eba7ef15b2b206dc5954 /src/core/SkImageCacherator.cpp | |
parent | 56f38fb7a9ccd1c0e04ea4896ef7724836836671 (diff) |
we must own/free the generator, even if we fail to return a cacherator
BUG=skia:4332
Review URL: https://codereview.chromium.org/1345523002
Diffstat (limited to 'src/core/SkImageCacherator.cpp')
-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); } |