7175566: [macosx] Glich in fix for CR7124247 caused MacOS crash during PIT testing

Reviewed-by: anthony, dcherepanov
This commit is contained in:
Alexander Zuev 2012-06-08 22:21:53 +04:00
parent 92246eda42
commit aaafa0557d

View file

@ -92,8 +92,8 @@ static jobject createJavaDisplayMode(CGDisplayModeRef mode, JNIEnv *env, jint di
CFStringRef currentBPP = CGDisplayModeCopyPixelEncoding(mode); CFStringRef currentBPP = CGDisplayModeCopyPixelEncoding(mode);
bpp = getBPPFromModeString(currentBPP); bpp = getBPPFromModeString(currentBPP);
refrate = CGDisplayModeGetRefreshRate(mode); refrate = CGDisplayModeGetRefreshRate(mode);
h = CGDisplayPixelsHigh(displayID); h = CGDisplayModeGetHeight(mode);
w = CGDisplayPixelsWide(displayID); w = CGDisplayModeGetWidth(mode);
CFRelease(currentBPP); CFRelease(currentBPP);
static JNF_CLASS_CACHE(jc_DisplayMode, "java/awt/DisplayMode"); static JNF_CLASS_CACHE(jc_DisplayMode, "java/awt/DisplayMode");
static JNF_CTOR_CACHE(jc_DisplayMode_ctor, jc_DisplayMode, "(IIII)V"); static JNF_CTOR_CACHE(jc_DisplayMode_ctor, jc_DisplayMode, "(IIII)V");
@ -154,14 +154,18 @@ Java_sun_awt_CGraphicsDevice_nativeSetDisplayMode
CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL); CFArrayRef allModes = CGDisplayCopyAllDisplayModes(displayID, NULL);
CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate); CGDisplayModeRef closestMatch = getBestModeForParameters(allModes, (int)w, (int)h, (int)bpp, (int)refrate);
if (closestMatch != NULL) { if (closestMatch != NULL) {
[JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
CGDisplayConfigRef config; CGDisplayConfigRef config;
CGError retCode = CGBeginDisplayConfiguration(&config); CGError retCode = CGBeginDisplayConfiguration(&config);
if (retCode == kCGErrorSuccess) { if (retCode == kCGErrorSuccess) {
CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL); CGConfigureDisplayWithDisplayMode(config, displayID, closestMatch, NULL);
CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly); CGCompleteDisplayConfiguration(config, kCGConfigureForAppOnly);
if (config != NULL) {
CFRelease(config); CFRelease(config);
} }
} }
}];
}
CFRelease(allModes); CFRelease(allModes);
JNF_COCOA_EXIT(env); JNF_COCOA_EXIT(env);
} }