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.

--Semyon
- 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


Reply via email to