--- old/src/java.desktop/share/classes/java/awt/Menu.java 2015-04-15 16:58:36.672222000 +0300 +++ new/src/java.desktop/share/classes/java/awt/Menu.java 2015-04-15 16:58:36.174222000 +0300 @@ -413,9 +413,9 @@ items.removeElementAt(index); MenuPeer peer = (MenuPeer)this.peer; if (peer != null) { + peer.delItem(index); mi.removeNotify(); mi.parent = null; - peer.delItem(index); } } } --- old/src/java.desktop/share/classes/java/awt/MenuBar.java 2015-04-15 16:58:39.492222000 +0300 +++ new/src/java.desktop/share/classes/java/awt/MenuBar.java 2015-04-15 16:58:39.013222000 +0300 @@ -222,7 +222,6 @@ if (m.parent != null) { m.parent.remove(m); } - menus.addElement(m); m.parent = this; MenuBarPeer peer = (MenuBarPeer)this.peer; @@ -232,6 +231,7 @@ } peer.addMenu(m); } + menus.addElement(m); return m; } } @@ -248,9 +248,9 @@ menus.removeElementAt(index); MenuBarPeer peer = (MenuBarPeer)this.peer; if (peer != null) { + peer.delMenu(index); m.removeNotify(); m.parent = null; - peer.delMenu(index); } if (helpMenu == m) { helpMenu = null; --- old/src/java.desktop/share/classes/java/awt/MenuComponent.java 2015-04-15 16:58:42.195222000 +0300 +++ new/src/java.desktop/share/classes/java/awt/MenuComponent.java 2015-04-15 16:58:41.692222000 +0300 @@ -297,11 +297,13 @@ * @see java.awt.font.TextAttribute */ public void setFont(Font f) { - font = f; - //Fixed 6312943: NullPointerException in method MenuComponent.setFont(Font) - MenuComponentPeer peer = this.peer; - if (peer != null) { - peer.setFont(f); + synchronized (getTreeLock()) { + font = f; + //Fixed 6312943: NullPointerException in method MenuComponent.setFont(Font) + MenuComponentPeer peer = this.peer; + if (peer != null) { + peer.setFont(f); + } } } --- old/src/java.desktop/windows/native/libawt/windows/awt_Menu.cpp 2015-04-15 16:58:44.853222000 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_Menu.cpp 2015-04-15 16:58:44.376222000 +0300 @@ -239,6 +239,7 @@ } jobject menuItem = env->CallObjectMethod(target, AwtMenu::getItemMID, index); + if (!menuItem) return NULL; // menu item was removed concurrently DASSERT(!safe_ExceptionOccurred(env)); jobject wMenuItemPeer = GetPeerForTarget(env, menuItem); @@ -264,9 +265,9 @@ } /* target is a java.awt.Menu */ jobject target = GetTarget(env); - + if(!target || env->ExceptionCheck()) return; int nCount = CountItem(target); - for (int i = 0; i < nCount; i++) { + for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) { AwtMenuItem* awtMenuItem = GetItem(target, i); if (awtMenuItem != NULL) { SendDrawItem(awtMenuItem, drawInfo); @@ -294,8 +295,9 @@ } /* target is a java.awt.Menu */ jobject target = GetTarget(env); + if(!target || env->ExceptionCheck()) return; int nCount = CountItem(target); - for (int i = 0; i < nCount; i++) { + for (int i = 0; i < nCount && !env->ExceptionCheck(); i++) { AwtMenuItem* awtMenuItem = GetItem(target, i); if (awtMenuItem != NULL) { SendMeasureItem(awtMenuItem, hDC, measureInfo); --- old/src/java.desktop/windows/native/libawt/windows/awt_MenuBar.cpp 2015-04-15 16:58:47.415222000 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_MenuBar.cpp 2015-04-15 16:58:46.940222000 +0300 @@ -156,13 +156,16 @@ } jobject menu = env->CallObjectMethod(target, AwtMenuBar::getMenuMID,index); + if (!menu) return NULL; // menu item was removed concurrently DASSERT(!safe_ExceptionOccurred(env)); jobject menuItemPeer = GetPeerForTarget(env, menu); PDATA pData; - JNI_CHECK_PEER_RETURN_NULL(menuItemPeer); + JNI_CHECK_PEER_GOTO(menuItemPeer, done); + AwtMenuItem* awtMenuItem = (AwtMenuItem*)pData; +done: env->DeleteLocalRef(menu); env->DeleteLocalRef(menuItemPeer); --- old/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp 2015-04-15 16:58:49.999222000 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_MenuItem.cpp 2015-04-15 16:58:49.529222000 +0300 @@ -112,6 +112,7 @@ JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); if (m_peerObject != NULL) { + JNI_SET_DESTROYED(m_peerObject); JNI_SET_PDATA(m_peerObject, NULL); env->DeleteGlobalRef(m_peerObject); m_peerObject = NULL; --- old/src/java.desktop/windows/native/libawt/windows/awt_new.cpp 2015-04-15 16:58:52.658222000 +0300 +++ new/src/java.desktop/windows/native/libawt/windows/awt_new.cpp 2015-04-15 16:58:52.151222000 +0300 @@ -172,6 +172,9 @@ env->ExceptionClear(); // rethrow exception env->Throw(xcp); + // temp solution to reveal all concurrency issues in jtreg and JCK + // we will switch it back to silent mode before the release + env->ExceptionDescribe(); return xcp; } }