mirror of
https://github.com/openjdk/jdk.git
synced 2026-02-17 22:05:31 +00:00
7007299: FileFontStrike appears not to be threadsafe?
Reviewed-by: igor, jgodinez
This commit is contained in:
parent
66b5a3c0ed
commit
decbe031fc
@ -58,7 +58,7 @@ public class FileFontStrike extends PhysicalStrike {
|
||||
private static final int SEGINTARRAY = 3;
|
||||
private static final int SEGLONGARRAY = 4;
|
||||
|
||||
private int glyphCacheFormat = UNINITIALISED;
|
||||
private volatile int glyphCacheFormat = UNINITIALISED;
|
||||
|
||||
/* segmented arrays are blocks of 256 */
|
||||
private static final int SEGSHIFT = 8;
|
||||
@ -522,32 +522,33 @@ public class FileFontStrike extends PhysicalStrike {
|
||||
}
|
||||
|
||||
/* Called only from synchronized code or constructor */
|
||||
private void initGlyphCache() {
|
||||
private synchronized void initGlyphCache() {
|
||||
|
||||
int numGlyphs = mapper.getNumGlyphs();
|
||||
|
||||
int tmpFormat = UNINITIALISED;
|
||||
if (segmentedCache) {
|
||||
int numSegments = (numGlyphs + SEGSIZE-1)/SEGSIZE;
|
||||
if (longAddresses) {
|
||||
glyphCacheFormat = SEGLONGARRAY;
|
||||
tmpFormat = SEGLONGARRAY;
|
||||
segLongGlyphImages = new long[numSegments][];
|
||||
this.disposer.segLongGlyphImages = segLongGlyphImages;
|
||||
} else {
|
||||
glyphCacheFormat = SEGINTARRAY;
|
||||
tmpFormat = SEGINTARRAY;
|
||||
segIntGlyphImages = new int[numSegments][];
|
||||
this.disposer.segIntGlyphImages = segIntGlyphImages;
|
||||
}
|
||||
} else {
|
||||
if (longAddresses) {
|
||||
glyphCacheFormat = LONGARRAY;
|
||||
tmpFormat = LONGARRAY;
|
||||
longGlyphImages = new long[numGlyphs];
|
||||
this.disposer.longGlyphImages = longGlyphImages;
|
||||
} else {
|
||||
glyphCacheFormat = INTARRAY;
|
||||
tmpFormat = INTARRAY;
|
||||
intGlyphImages = new int[numGlyphs];
|
||||
this.disposer.intGlyphImages = intGlyphImages;
|
||||
}
|
||||
}
|
||||
glyphCacheFormat = tmpFormat;
|
||||
}
|
||||
|
||||
float getGlyphAdvance(int glyphCode) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user