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

Sergey Bylokhov Sergey.Bylokhov at oracle.com
Thu Jan 31 06:50:27 PST 2013


Hi, Alexander.
Thanks for info. Fix looks good to me. But I am not sure about CFRelease 
removing, because "On return, this configuration is no longer valid." is 
not clear.

31.01.2013 18:28, Alexander Scherbatiy wrote:
> 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.
>>>
>>
>>
>


-- 
Best regards, Sergey.




More information about the awt-dev mailing list