<AWT Dev> [9] Review request for 8176490: [macosx] Sometimes NSWindow.isZoomed hangs

Sergey Bylokhov sergey.bylokhov at oracle.com
Thu Mar 23 13:36:49 UTC 2017


Hi, Dmitry.
Can you please check that the fix does not break the situation when the frame is created using max W/H of the screen. In this case the old zoom logic return true, is it possible that the new logic will return false since deliverMoveResizeEvent
will not be called?

> 
> 
> Hello,
> 
> Could you review a fix for jdk9, please?
> 
> 	bug: https://bugs.openjdk.java.net/browse/JDK-8176490
> 	webrev: http://cr.openjdk.java.net/~dmarkov/8176490/webrev.00/
> 
> Problem description:
> On OSX AppKit thread and EDT or main application thread might be blocked when a child window is displayed and its parent is hidden at the same time. AppKit thread performs windows ordering caused by displaying of the child window. It retrieves child windows for the parent window and tries to acquire the monitor inside Window.getOwnedWindows_NoClientCode(). However the monitor is already owned by EDT/main application thread which executes setVisible(false) on the parent window. That thread hangs on invocation of CWrapper.NSWindow.isZoomed() since the function must be executed on AppKit thread.
> 
> Fix:
> Add a new field isZoomed to CPlatformWindow class. The field will contain information about current zoom state for the window. The method deliverMoveResizeEvent() will update the new field using data from the platform. The invocations of CWrapper.NSWindow.isZoomed() in CPlatformWindow should be replaced with isZoomed field. 
> 
> Note: I ran JCK tests on the build with fix and did not observe any new problems.
> 
> Thanks,
> Dmitry



More information about the awt-dev mailing list