--- a/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java Mon Aug 18 14:03:21 2014 +0100
+++ b/jdk/src/java.desktop/share/classes/sun/font/FileFontStrike.java Tue Aug 19 10:32:16 2014 -0700
@@ -454,6 +454,17 @@
/* Only look in the cache */
long getCachedGlyphPtr(int glyphCode) {
+ try {
+ return getCachedGlyphPtrInternal(glyphCode);
+ } catch (Exception e) {
+ NullFontScaler nullScaler =
+ (NullFontScaler)FontScaler.getNullScaler();
+ long nullSC = NullFontScaler.getNullScalerContext();
+ return nullScaler.getGlyphImage(nullSC, glyphCode);
+ }
+ }
+
+ private long getCachedGlyphPtrInternal(int glyphCode) {
switch (glyphCacheFormat) {
case INTARRAY:
return intGlyphImages[glyphCode] & INTMASK;
@@ -481,6 +492,27 @@
}
private synchronized long setCachedGlyphPtr(int glyphCode, long glyphPtr) {
+ try {
+ return setCachedGlyphPtrInternal(glyphCode, glyphPtr);
+ } catch (Exception e) {
+ switch (glyphCacheFormat) {
+ case INTARRAY:
+ case SEGINTARRAY:
+ StrikeCache.freeIntPointer((int)glyphPtr);
+ break;
+ case LONGARRAY:
+ case SEGLONGARRAY:
+ StrikeCache.freeLongPointer(glyphPtr);
+ break;
+ }
+ NullFontScaler nullScaler =
+ (NullFontScaler)FontScaler.getNullScaler();
+ long nullSC = NullFontScaler.getNullScalerContext();
+ return nullScaler.getGlyphImage(nullSC, glyphCode);
+ }
+ }
+
+ private long setCachedGlyphPtrInternal(int glyphCode, long glyphPtr) {
switch (glyphCacheFormat) {
case INTARRAY:
if (intGlyphImages[glyphCode] == 0) {