aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/macosx/classes/sun/font/CStrike.java10
-rw-r--r--src/macosx/classes/sun/font/CStrikeDisposer.java2
-rw-r--r--src/macosx/native/sun/font/AWTStrike.m18
3 files changed, 28 insertions, 2 deletions
diff --git a/src/macosx/classes/sun/font/CStrike.java b/src/macosx/classes/sun/font/CStrike.java
index 61fe234cb2..9635b85a1d 100644
--- a/src/macosx/classes/sun/font/CStrike.java
+++ b/src/macosx/classes/sun/font/CStrike.java
@@ -500,7 +500,10 @@ public class CStrike extends FontStrike {
final Iterator<Long> 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 @@ public class CStrike extends FontStrike {
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
+ }
}
}
diff --git a/src/macosx/classes/sun/font/CStrikeDisposer.java b/src/macosx/classes/sun/font/CStrikeDisposer.java
index 7357ea6bd4..661bd6a7b4 100644
--- a/src/macosx/classes/sun/font/CStrikeDisposer.java
+++ b/src/macosx/classes/sun/font/CStrikeDisposer.java
@@ -85,4 +85,6 @@ class CStrikeDisposer extends FontStrikeDisposer {
}
private native void freeNativeScalerContext(long pContext);
+
+ protected static native void removeGlyphInfoFromCache(long glyphInfo);
}
diff --git a/src/macosx/native/sun/font/AWTStrike.m b/src/macosx/native/sun/font/AWTStrike.m
index 261bd34ae5..7f04b530ad 100644
--- a/src/macosx/native/sun/font/AWTStrike.m
+++ b/src/macosx/native/sun/font/AWTStrike.m
@@ -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"
/* Use THIS_FILE when it is available. */
#ifndef THIS_FILE
@@ -423,3 +425,19 @@ JNF_COCOA_EXIT(env);
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);
+}