提交 7cceecb4 编写于 作者: P prr

8017580: Crash in font loading code on Linux (due to use of reflection)

Reviewed-by: bae, vadim
上级 1d90e1c9
...@@ -71,13 +71,17 @@ JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getGlyphImage ...@@ -71,13 +71,17 @@ JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getGlyphImage
void initLCDGammaTables(); void initLCDGammaTables();
/* placeholder for extern variable */ /* placeholder for extern variable */
static int initialisedFontIDs = 0;
FontManagerNativeIDs sunFontIDs; FontManagerNativeIDs sunFontIDs;
JNIEXPORT void JNICALL static void initFontIDs(JNIEnv *env) {
Java_sun_font_SunFontManager_initIDs
(JNIEnv *env, jclass cls) { jclass tmpClass;
jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont"); if (initialisedFontIDs) {
return;
}
tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
sunFontIDs.ttReadBlockMID = sunFontIDs.ttReadBlockMID =
(*env)->GetMethodID(env, tmpClass, "readBlock", (*env)->GetMethodID(env, tmpClass, "readBlock",
"(Ljava/nio/ByteBuffer;II)I"); "(Ljava/nio/ByteBuffer;II)I");
...@@ -173,9 +177,20 @@ Java_sun_font_SunFontManager_initIDs ...@@ -173,9 +177,20 @@ Java_sun_font_SunFontManager_initIDs
(*env)->GetFieldID(env, tmpClass, "lcdSubPixPos", "Z"); (*env)->GetFieldID(env, tmpClass, "lcdSubPixPos", "Z");
initLCDGammaTables(); initLCDGammaTables();
initialisedFontIDs = 1;
} }
JNIEXPORT FontManagerNativeIDs getSunFontIDs() { JNIEXPORT void JNICALL
Java_sun_font_SunFontManager_initIDs
(JNIEnv *env, jclass cls) {
initFontIDs(env);
}
JNIEXPORT FontManagerNativeIDs getSunFontIDs(JNIEnv *env) {
initFontIDs(env);
return sunFontIDs; return sunFontIDs;
} }
......
...@@ -84,7 +84,7 @@ typedef struct FontManagerNativeIDs { ...@@ -84,7 +84,7 @@ typedef struct FontManagerNativeIDs {
/* Note: we share variable in the context of fontmanager lib /* Note: we share variable in the context of fontmanager lib
but we need access method to use it from separate rasterizer lib */ but we need access method to use it from separate rasterizer lib */
extern FontManagerNativeIDs sunFontIDs; extern FontManagerNativeIDs sunFontIDs;
JNIEXPORT FontManagerNativeIDs getSunFontIDs(); JNIEXPORT FontManagerNativeIDs getSunFontIDs(JNIEnv* env);
#ifdef __cplusplus #ifdef __cplusplus
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册