Chromium Code Reviews| Index: src/image/SkImage_Raster.cpp |
| diff --git a/src/image/SkImage_Raster.cpp b/src/image/SkImage_Raster.cpp |
| index af8f79010f134047b0ebf25678f9a22364dcb0d3..8afe7fd13aeec1668dd08c6ea15b1f985387c375 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(); |
|
f(malita)
2015/09/10 18:36:37
This may solve the preRoll race, but don't we have
|
| } |
| SkData* SkImage_Raster::onRefEncoded() const { |