<AWT Dev> [9] Review Request: 8165769 Hang in the help menu item

Semyon Sadetsky semyon.sadetsky at oracle.com
Wed Nov 16 14:32:17 UTC 2016

On 16.11.2016 16:05, Sergey Bylokhov wrote:

> Hello.
> Please review the fix for jdk9.
> There are a few issues which can cause a hang in some of our menu 
> stress tests:
>  - Lack in synchronization in the Menu, we tried to synchronized the 
> write of fields, but skip synchronization when we read the fields(in 
> getters for example). In the fix most of the fields were marked as 
> final(if possible) or volatile.
Since the synchronized blocks cannot be simply omitted the adding 
volatile keyword to the fields doesn't improve multithreading capability 
of menu components and the most of the proposed changes practically useless.

Changing package private accesses to private in general improves 
encapsulation and may be approved. But multithreading issues should be 
fixed differently.

Actually the MenuComponent appContext field is never changed according 
to its spec:
      * The {@code AppContext} of the {@code MenuComponent}.
      * This is set in the constructor and never changes.
     transient AppContext appContext;

I suggest to declare it final and also this will be enough to make it 
thread safe.

Note that Component appContext field can be changed and this 
multithreading issue should be resolved. Since the filed is accessed 
only using the component accessor it should be enough to synchronize the 
corresponding getter and setter.

>  - When the submenu is removed from Menu/MenuBar we do not reset its 
> parent field if the Menu/MenuBar have peer==null. So if later we tried 
> to call MenuBar.setHelpMenu(submenu) we skip this submenu because we 
> think it was added already.
> Bug: https://bugs.openjdk.java.net/browse/JDK-8165769
> Webrev can be found at: 
> http://cr.openjdk.java.net/~serb/8165769/webrev.00

More information about the awt-dev mailing list