< prev index next >
src/java.desktop/windows/native/libawt/windows/awt_MenuBar.cpp
Print this page
*** 154,170 ****
if (env->EnsureLocalCapacity(2) < 0) {
return NULL;
}
jobject menu = env->CallObjectMethod(target, AwtMenuBar::getMenuMID,index);
DASSERT(!safe_ExceptionOccurred(env));
jobject menuItemPeer = GetPeerForTarget(env, menu);
PDATA pData;
! JNI_CHECK_PEER_RETURN_NULL(menuItemPeer);
AwtMenuItem* awtMenuItem = (AwtMenuItem*)pData;
env->DeleteLocalRef(menu);
env->DeleteLocalRef(menuItemPeer);
return awtMenuItem;
}
--- 154,173 ----
if (env->EnsureLocalCapacity(2) < 0) {
return NULL;
}
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_GOTO(menuItemPeer, done);
!
AwtMenuItem* awtMenuItem = (AwtMenuItem*)pData;
+ done:
env->DeleteLocalRef(menu);
env->DeleteLocalRef(menuItemPeer);
return awtMenuItem;
}
< prev index next >