(hotspot-...@openjdk is added to CC)
On 8/31/2010 1:16 AM, Pete Brunet wrote:
p.s. I tried the various JNI -XX switches listed here, at least the ones that made sense to try in my situation: http://www.md.pp.ru/~eu/jdk6options.html Pete Brunet wrote:I'm looking for guidance in how to debug the following jvm assert failure. I've tried both -Xcheck:jni and -verbose:jni but neither of those added any information at the point of failure. Thanks, Pete # Internal Error (c:\OpenJDK-b96m\jdk7\hotspot\src\share\vm\interpreter\linkResolver.cpp:71), pid=5216, tid=7228 # assert(resolved_method->signature() == selected_method->signature()) failed: signatures must correspond The stack looks like this: V [jvm.dll+0x3a8894] V [jvm.dll+0x128195] V [jvm.dll+0x29b5fd] V [jvm.dll+0x29e42e] V [jvm.dll+0x29f795] V [jvm.dll+0x29f8f8] V [jvm.dll+0x1a2e50] j java.awt.Component$1.getAccessibleContext(Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;+16 v ~StubRoutines::call_stub ... The calling code in awt_Component.cpp looks like this: In AwtComponent::InitIDs: jclass awtAccessorCls = env->FindClass("sun/awt/AWTAccessor"); jclass componentAccessorCls = env->FindClass("sun/awt/AWTAccessor$ComponentAccessor"); DASSERT(awtAccessorCls); DASSERT(componentAccessorCls); ... AwtComponent::getComponentAccessorMID = env->GetStaticMethodID(awtAccessorCls, "getComponentAccessor", "()Lsun/awt/AWTAccessor$ComponentAccessor;"); AwtComponent::getAccessibleContextMID = env->GetMethodID(componentAccessorCls, "getAccessibleContext", "(Ljava/awt/Component;)Ljavax/accessibility/AccessibleContext;"); DASSERT(AwtComponnet::getComponentAccessorMID); DASSERT(AwtComponent::getAccessibleContextMID); ... jobject AwtComponent::GetAccessibleContext(HWND hwnd) { JNIEnv *env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2); jclass awtAccessorCls = env->FindClass("sun/awt/AWTAccessor"); jobject ca = env->CallStaticObjectMethod(awtAccessorCls, AwtComponent::getComponentAccessorMID); DASSERT(!safe_ExceptionOccurred(env)); AwtComponent* c = GetComponentImpl(hwnd); jobject self = c->GetPeer(env); // self is the java side of the peer code, i.e. the Component jobject ac = env->CallObjectMethod(ca, AwtComponent::getAccessibleContextMID, self); ... The called method, getAccessibleContext, in java.awt.Component looks like this: static { AWTAccessor.setComponentAccessor(new AWTAccessor.ComponentAccessor() { ... public AccessibleContext getAccessibleContext(Component comp) { return comp.accessibleContext; } }); } Thanks, Pete
