--- old/src/macosx/classes/sun/font/CStrike.java 2012-03-14 15:48:10.000000000 +0400 +++ new/src/macosx/classes/sun/font/CStrike.java 2012-03-14 15:48:10.000000000 +0400 @@ -500,7 +500,10 @@ final Iterator i = generalCache.values().iterator(); while (i.hasNext()) { final long longValue = i.next().longValue(); - if (longValue != -1 && longValue != 0) StrikeCache.freeLongPointer(longValue); + if (longValue != -1 && longValue != 0) { + removeGlyphInfoFromCache(longValue); + StrikeCache.freeLongPointer(longValue); + } } } @@ -512,7 +515,10 @@ private static void disposeLongArray(final long[] longArray) { for (int i = 0; i < longArray.length; i++) { final long ptr = longArray[i]; - if (ptr != 0 && ptr != -1) StrikeCache.freeLongPointer(ptr); // free's the native struct pointer + if (ptr != 0 && ptr != -1) { + removeGlyphInfoFromCache(ptr); + StrikeCache.freeLongPointer(ptr); // free's the native struct pointer + } } } --- old/src/macosx/classes/sun/font/CStrikeDisposer.java 2012-03-14 15:48:11.000000000 +0400 +++ new/src/macosx/classes/sun/font/CStrikeDisposer.java 2012-03-14 15:48:11.000000000 +0400 @@ -85,4 +85,6 @@ } private native void freeNativeScalerContext(long pContext); + + protected static native void removeGlyphInfoFromCache(long glyphInfo); } --- old/src/macosx/native/sun/font/AWTStrike.m 2012-03-14 15:48:12.000000000 +0400 +++ new/src/macosx/native/sun/font/AWTStrike.m 2012-03-14 15:48:11.000000000 +0400 @@ -27,11 +27,13 @@ #import "java_awt_geom_PathIterator.h" #import "sun_awt_SunHints.h" #import "sun_font_CStrike.h" +#import "sun_font_CStrikeDisposer.h" #import "CGGlyphImages.h" #import "CGGlyphOutlines.h" #import "AWTStrike.h" #import "CoreTextSupport.h" //#import "jni_util.h" +#include "fontscalerdefs.h" @implementation AWTStrike @@ -418,3 +420,19 @@ return metrics; } + +extern void AccelGlyphCache_RemoveAllInfos(GlyphInfo* glyph); +/* + * Class: sun_font_CStrikeDisposer + * Method: removeGlyphInfoFromCache + * Signature: (J)V + */ +JNIEXPORT void JNICALL Java_sun_font_CStrikeDisposer_removeGlyphInfoFromCache +(JNIEnv *env, jclass cls, jlong glyphInfo) +{ + JNF_COCOA_ENTER(env); + + AccelGlyphCache_RemoveAllCellInfos((GlyphInfo*)jlong_to_ptr(glyphInfo)); + + JNF_COCOA_EXIT(env); +}