# HG changeset patch # User prr # Date 1380312407 25200 # Node ID e3df2e31e33fe9c4f9b3b3db167c73bc3dbbcaaf # Parent 6e96282e913f8c71d8ed3bc76e8cdb42e46eb6e7 8020190, PR2160, RH1176718: Fatal: Bug in native code: jfieldID must match object Reviewed-by: jgodinez, vadim diff -r 6e96282e913f -r e3df2e31e33f src/share/classes/sun/font/FreetypeFontScaler.java --- a/src/share/classes/sun/font/FreetypeFontScaler.java Fri Dec 12 16:55:22 2014 +0000 +++ b/src/share/classes/sun/font/FreetypeFontScaler.java Fri Sep 27 13:06:47 2013 -0700 @@ -169,7 +169,7 @@ public synchronized void dispose() { if (nativeScaler != 0L) { - disposeNativeScaler(nativeScaler); + disposeNativeScaler(font.get(), nativeScaler); nativeScaler = 0L; } } @@ -190,7 +190,7 @@ synchronized int getGlyphCode(char charCode) throws FontScalerException { if (nativeScaler != 0L) { - return getGlyphCodeNative(nativeScaler, charCode); + return getGlyphCodeNative(font.get(), nativeScaler, charCode); } return FontScaler.getNullScaler().getGlyphCode(charCode); } @@ -245,9 +245,9 @@ private native long getLayoutTableCacheNative(long pScaler); - private native void disposeNativeScaler(long pScaler); + private native void disposeNativeScaler(Font2D font2D, long pScaler); - private native int getGlyphCodeNative(long pScaler, char charCode); + private native int getGlyphCodeNative(Font2D font, long pScaler, char charCode); private native int getNumGlyphsNative(long pScaler); private native int getMissingGlyphCodeNative(long pScaler); diff -r 6e96282e913f -r e3df2e31e33f src/share/native/sun/font/freetypeScaler.c --- a/src/share/native/sun/font/freetypeScaler.c Fri Dec 12 16:55:22 2014 +0000 +++ b/src/share/native/sun/font/freetypeScaler.c Fri Sep 27 13:06:47 2013 -0700 @@ -1038,13 +1038,13 @@ */ JNIEXPORT void JNICALL Java_sun_font_FreetypeFontScaler_disposeNativeScaler( - JNIEnv *env, jobject scaler, jlong pScaler) { + JNIEnv *env, jobject scaler, jobject font2D, jlong pScaler) { FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler); /* Freetype functions *may* cause callback to java that can use cached values. Make sure our cache is up to date. NB: scaler context is not important at this point, can use NULL. */ - int errCode = setupFTContext(env, scaler, scalerInfo, NULL); + int errCode = setupFTContext(env, font2D, scalerInfo, NULL); if (errCode) { return; } @@ -1093,7 +1093,8 @@ */ JNIEXPORT jint JNICALL Java_sun_font_FreetypeFontScaler_getGlyphCodeNative( - JNIEnv *env, jobject scaler, jlong pScaler, jchar charCode) { + JNIEnv *env, jobject scaler, + jobject font2D, jlong pScaler, jchar charCode) { FTScalerInfo* scalerInfo = (FTScalerInfo *) jlong_to_ptr(pScaler); int errCode; @@ -1106,7 +1107,7 @@ /* Freetype functions *may* cause callback to java that can use cached values. Make sure our cache is up to date. Scaler context is not important here, can use NULL. */ - errCode = setupFTContext(env, scaler, scalerInfo, NULL); + errCode = setupFTContext(env, font2D, scalerInfo, NULL); if (errCode) { return 0; }