[8] Review request for 8007146 [macosx] Setting a display mode crashes JDK under VNC

Alexander Scherbatiy alexandr.scherbatiy at oracle.com
Thu Jan 31 06:28:27 PST 2013


On 1/31/2013 5:56 PM, Sergey Bylokhov wrote:
> Hi, Alexander.
> Could we check DM in setDisplayMode() against modes from 
> CGraphicsDevice.getDisplayModes() on java lvl?
     1. We need to filter display modes which have width = 1 and height 
= 1 in the list returned by the CGDisplayCopyAllDisplayModes function.
    The code below reproduces the problem in pure Cocoa application:

------------------------------------------
- (void) test {
     int MAX_DISPLAYS = 100;
     CGDirectDisplayID displays[MAX_DISPLAYS];
     uint32_t numDisplays;
     uint32_t i;
     CGGetActiveDisplayList(MAX_DISPLAYS, displays, &numDisplays);
     for(i=0; i<numDisplays; i++)
     {
         CGDisplayModeRef mode;
         CFIndex index, count;
         CFArrayRef modeList;
         modeList=CGDisplayCopyAllDisplayModes(displays[i], NULL);
         count=CFArrayGetCount(modeList);
         NSLog(@"\n\nmode --");
         for(index=0;index<count;index++)
         {
             mode=(CGDisplayModeRef)CFArrayGetValueAtIndex(modeList, index);
             long h=0, w=0;
             h=CGDisplayModeGetHeight(mode);
             w=CGDisplayModeGetWidth(mode);
             uint32_t flags=CGDisplayModeGetIOFlags(mode);
             NSLog(@"flags: %d", flags);
             NSLog(@"w, h: %ld, %ld", w, h);
         }
         CFRelease(modeList);
     }

}
------------------------------------------------
mode --
2013-01-31 18:29:35.220 MyWindowTest[78789:707] flags: 7
2013-01-31 18:29:35.221 MyWindowTest[78789:707] w, h: 1, 1
2013-01-31 18:29:35.221 MyWindowTest[78789:707] flags: 7
2013-01-31 18:29:35.222 MyWindowTest[78789:707] w, h: 1, 1
2013-01-31 18:29:35.222 MyWindowTest[78789:707] flags: 7
2013-01-31 18:29:35.223 MyWindowTest[78789:707] w, h: 1, 1
2013-01-31 18:29:35.223 MyWindowTest[78789:707] flags: 7
2013-01-31 18:29:35.223 MyWindowTest[78789:707] w, h: 1, 1
2013-01-31 18:29:35.224 MyWindowTest[78789:707] flags: 7
2013-01-31 18:29:35.224 MyWindowTest[78789:707] w, h: 1, 1
---------------------------------------------------------------------------


2.  The getBestModeForParameters method allows to set only those display 
methods which have the same width, height, and bit depth with the 
existed display modes.
    It seems that there is no need to check the display modes one more 
time on java level.

Thanks,
Alexandr.



>
> 31.01.2013 17:46, Alexander Scherbatiy wrote:
>>
>> bug: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=8007146
>> webrev: http://cr.openjdk.java.net/~alexsch/8007146/webrev.00
>>
>> The issue is reproduced when a program is running under a VNC and all 
>> monitors are disconnected from the Mac OS X system.
>> The CGDisplayCopyAllDisplayModes returns display modes with width and 
>> height equal to 1.
>> CGCompleteDisplayConfiguration returns error when the invalid display 
>> mode is set and JDK crashes after releasing the display configuration.
>> According to the CGCompleteDisplayConfiguration doc: "On return, this 
>> configuration is no longer valid."
>>
>> The fix filters the invalid display modes and does not release the 
>> display configuration.
>>
>> Thanks,
>> Alexandr.
>>
>
>



More information about the macosx-port-dev mailing list