aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar reed <reed@google.com>2015-09-10 11:38:58 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2015-09-10 11:38:58 -0700
commita10bb86da82449b8756da5d00384993351f56d1d (patch)
treee830bb37bc6ff51be1db8cd8867e3f55422056c4 /src
parenteef3c5b24f53598b68d6f6e0871e322862439b1b (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.cpp7
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 {