Fix race in SkTypeface_FreeType::onCountGlyphs.

Found by TSAN. This makes the operation slightly slower, but it is
not on any user's hot path.

BUG=skia:5238

Review-Url: https://codereview.chromium.org/1940613002
This commit is contained in:
bungeman 2016-04-29 15:05:02 -07:00 committed by Commit bot
parent 4d9ff62fa2
commit 572f879b61
2 changed files with 3 additions and 11 deletions

View File

@ -1526,14 +1526,9 @@ int SkTypeface_FreeType::onCharsToGlyphs(const void* chars, Encoding encoding,
}
int SkTypeface_FreeType::onCountGlyphs() const {
// we cache this value, using -1 as a sentinel for "not computed"
if (fGlyphCount < 0) {
AutoFTAccess fta(this);
FT_Face face = fta.face();
// if the face failed, we still assign a non-negative value
fGlyphCount = face ? face->num_glyphs : 0;
}
return fGlyphCount;
AutoFTAccess fta(this);
FT_Face face = fta.face();
return face ? face->num_glyphs : 0;
}
SkTypeface::LocalizedStrings* SkTypeface_FreeType::onCreateFamilyNameIterator() const {

View File

@ -73,7 +73,6 @@ public:
protected:
SkTypeface_FreeType(const SkFontStyle& style, SkFontID uniqueID, bool isFixedPitch)
: INHERITED(style, uniqueID, isFixedPitch)
, fGlyphCount(-1)
{}
virtual SkScalerContext* onCreateScalerContext(const SkScalerContextEffects&,
@ -95,8 +94,6 @@ protected:
size_t length, void* data) const override;
private:
mutable int fGlyphCount;
typedef SkTypeface INHERITED;
};