diff options
author | 2015-09-10 11:38:58 -0700 | |
---|---|---|
committer | 2015-09-10 11:38:58 -0700 | |
commit | a10bb86da82449b8756da5d00384993351f56d1d (patch) | |
tree | e830bb37bc6ff51be1db8cd8867e3f55422056c4 /src | |
parent | eef3c5b24f53598b68d6f6e0871e322862439b1b (diff) |
make a shallow-copy so we don't get racy trying to lock/unlock our private bitmap
BUG= 529995
NOTREECHECKS=True
Review URL: https://codereview.chromium.org/1327313002
Diffstat (limited to 'src')
-rw-r--r-- | src/image/SkImage_Raster.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp index af8f79010f..8afe7fd13a 100644 --- a/src/image/SkImage_Raster.cpp +++ b/src/image/SkImage_Raster.cpp @@ -165,8 +165,11 @@ const void* SkImage_Raster::onPeekPixels(SkImageInfo* infoPtr, size_t* rowBytesP } void SkImage_Raster::onPreroll(GrContext* ctx) const { - fBitmap.lockPixels(); - fBitmap.unlockPixels(); + // SkImage can be called from lots of threads, but our fBitmap is *not* thread-safe, + // so we have to perform this lock/unlock in a non-racy way... we make a copy! + SkBitmap localShallowCopy(fBitmap); + localShallowCopy.lockPixels(); + localShallowCopy.unlockPixels(); } SkData* SkImage_Raster::onRefEncoded() const { |