提交 fffc6497 编写于 作者: P pchelko

8034035: [parfait] JNI exception pending in jdk/src/macosx/native/sun/awt/LWCToolkit.m

Reviewed-by: serb, azvegint
上级 8d7eadf1
...@@ -200,13 +200,17 @@ Java_sun_lwawt_macosx_LWCToolkit_initIDs ...@@ -200,13 +200,17 @@ Java_sun_lwawt_macosx_LWCToolkit_initIDs
gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS; gNumberOfButtons = sun_lwawt_macosx_LWCToolkit_BUTTONS;
jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent"); jclass inputEventClazz = (*env)->FindClass(env, "java/awt/event/InputEvent");
CHECK_NULL(inputEventClazz);
jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I"); jmethodID getButtonDownMasksID = (*env)->GetStaticMethodID(env, inputEventClazz, "getButtonDownMasks", "()[I");
CHECK_NULL(getButtonDownMasksID);
jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID); jintArray obj = (jintArray)(*env)->CallStaticObjectMethod(env, inputEventClazz, getButtonDownMasksID);
jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE); jint * tmp = (*env)->GetIntArrayElements(env, obj, JNI_FALSE);
CHECK_NULL(tmp);
gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons); gButtonDownMasks = (jint*)SAFE_SIZE_ARRAY_ALLOC(malloc, sizeof(jint), gNumberOfButtons);
if (gButtonDownMasks == NULL) { if (gButtonDownMasks == NULL) {
gNumberOfButtons = 0; gNumberOfButtons = 0;
(*env)->ReleaseIntArrayElements(env, obj, tmp, JNI_ABORT);
JNU_ThrowOutOfMemoryError(env, NULL); JNU_ThrowOutOfMemoryError(env, NULL);
return; return;
} }
...@@ -240,7 +244,7 @@ static UInt32 RGB(NSColor *c) { ...@@ -240,7 +244,7 @@ static UInt32 RGB(NSColor *c) {
return ((ia & 0xFF) << 24) | ((ir & 0xFF) << 16) | ((ig & 0xFF) << 8) | ((ib & 0xFF) << 0); return ((ia & 0xFF) << 24) | ((ir & 0xFF) << 16) | ((ig & 0xFF) << 8) | ((ib & 0xFF) << 0);
} }
void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { BOOL doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
jint len = (*env)->GetArrayLength(env, jColors); jint len = (*env)->GetArrayLength(env, jColors);
UInt32 colorsArray[len]; UInt32 colorsArray[len];
...@@ -254,8 +258,12 @@ void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) { ...@@ -254,8 +258,12 @@ void doLoadNativeColors(JNIEnv *env, jintArray jColors, BOOL useAppleColors) {
}]; }];
jint *_colors = (*env)->GetPrimitiveArrayCritical(env, jColors, 0); jint *_colors = (*env)->GetPrimitiveArrayCritical(env, jColors, 0);
if (_colors == NULL) {
return NO;
}
memcpy(_colors, colors, len * sizeof(UInt32)); memcpy(_colors, colors, len * sizeof(UInt32));
(*env)->ReleasePrimitiveArrayCritical(env, jColors, _colors, 0); (*env)->ReleasePrimitiveArrayCritical(env, jColors, _colors, 0);
return YES;
} }
/** /**
...@@ -267,8 +275,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_loadNativeColors ...@@ -267,8 +275,9 @@ JNIEXPORT void JNICALL Java_sun_lwawt_macosx_LWCToolkit_loadNativeColors
(JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors) (JNIEnv *env, jobject peer, jintArray jSystemColors, jintArray jAppleColors)
{ {
JNF_COCOA_ENTER(env); JNF_COCOA_ENTER(env);
doLoadNativeColors(env, jSystemColors, NO); if (doLoadNativeColors(env, jSystemColors, NO)) {
doLoadNativeColors(env, jAppleColors, YES); doLoadNativeColors(env, jAppleColors, YES);
}
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册