diff options
author | bungeman <bungeman@google.com> | 2015-11-03 11:07:20 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-11-03 11:07:20 -0800 |
commit | 3f846ae913f0e01eedf889fff062e9a1dc9f4f8b (patch) | |
tree | c8c15293c44a9774911e3e78b5641a7b0e74b4e7 /src/ports | |
parent | 0c2999974d189ea257f82c9b7672d9afda52f6c2 (diff) |
Take mutex when calling into FreeType.
SkScalerContext_FreeType::generateCharToGlyph and generateGlyphToChar
do not take a mutex when calling into FreeType, but they need to.
The setupSize method also requires the mutex to be locked, which is
not a problem since it currently always is, but add a debug assert
to ensure that it continues to be.
BUG=chromium:542640
Review URL: https://codereview.chromium.org/1431683006
Diffstat (limited to 'src/ports')
-rw-r--r-- | src/ports/SkFontHost_FreeType.cpp | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/ports/SkFontHost_FreeType.cpp b/src/ports/SkFontHost_FreeType.cpp index 32eafad87c..e8b72b5e09 100644 --- a/src/ports/SkFontHost_FreeType.cpp +++ b/src/ports/SkFontHost_FreeType.cpp @@ -949,6 +949,7 @@ SkScalerContext_FreeType::~SkScalerContext_FreeType() { this face with other context (at different sizes). */ FT_Error SkScalerContext_FreeType::setupSize() { + gFTMutex.assertHeld(); FT_Error err = FT_Activate_Size(fFTSize); if (err != 0) { SkDEBUGF(("SkScalerContext_FreeType::FT_Activate_Size(%s %s, 0x%x, 0x%x) returned 0x%x\n", @@ -968,10 +969,12 @@ unsigned SkScalerContext_FreeType::generateGlyphCount() { } uint16_t SkScalerContext_FreeType::generateCharToGlyph(SkUnichar uni) { + SkAutoMutexAcquire ac(gFTMutex); return SkToU16(FT_Get_Char_Index( fFace, uni )); } SkUnichar SkScalerContext_FreeType::generateGlyphToChar(uint16_t glyph) { + SkAutoMutexAcquire ac(gFTMutex); // iterate through each cmap entry, looking for matching glyph indices FT_UInt glyphIndex; SkUnichar charCode = FT_Get_First_Char( fFace, &glyphIndex ); |