You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by "Evgueni Brevnov (JIRA)" <ji...@apache.org> on 2006/11/24 14:28:03 UTC
[jira] Commented: (HARMONY-2306) [drlvm][jvmti] VM crashes if
j.l.Thread is instrumented by JVMTI profiler
[ http://issues.apache.org/jira/browse/HARMONY-2306?page=comments#action_12452447 ]
Evgueni Brevnov commented on HARMONY-2306:
------------------------------------------
I'll take a look.
Evgueni
> [drlvm][jvmti] VM crashes if j.l.Thread is instrumented by JVMTI profiler
> -------------------------------------------------------------------------
>
> Key: HARMONY-2306
> URL: http://issues.apache.org/jira/browse/HARMONY-2306
> Project: Harmony
> Issue Type: Bug
> Components: DRLVM, App-Oriented Bug Reports
> Environment: Windows/ia32, Linux/ia32
> Reporter: Ivan Popov
> Attachments: ThreadEventsTest.zip
>
>
> After applying fix for HARMONY-2200 to DRLVM (r475994), it appeared work well with instrumented HelloWorld class. But now it crashes if profiler instruments system class java/lang/Thread.
> With debug build of DRLVM assertion is thrown:
> .../vm/thread/src/thread_ti_timing.c:63: jthread_get_thread_cpu_time: Assertion `java_thread' failed
> Here is typical stack trace from the VC++ debugger:
> > harmonyvm.dll!GetObjectClass(JNIEnv_External * env=0x010177e8, _jobject * obj=0x00000000) Line 1052 + 0x4 C++
> harmonyvm.dll!vm_jthread_get_tm_data(_jobject * thread=0x00000000) Line 189 C++
> harmonyvm.dll!jthread_get_thread_cpu_time(_jobject * java_thread=0x00000000, __int64 * nanos_ptr=0x0013f428) Line 67 C
> harmonyvm.dll!jvmtiGetCurrentThreadCpuTime(jvmtiEnv_struct * env=0x00000004, __int64 * nanos_ptr=0x0013f428) Line 113 + 0xc C++
> ThreadEvents.dll!01c1162a()
> ThreadEvents.dll!01c11039()
> interpreter.dll!invokeJNI(unsigned int * args=0x0013f460, int sz=4, void (void)* f=0x01c11000) Line 50 C++
> interpreter.dll!interpreterInvokeStaticNative(StackFrame & prevFrame={...}, StackFrame & frame={...}, Method * method=0x01ec5420) Line 354 C++
> interpreter.dll!interpreterInvokeStatic(StackFrame & prevFrame={...}, Method * method=0x01ec5420) Line 3334 C++
> interpreter.dll!Opcode_INVOKESTATIC(StackFrame & frame={...}) Line 2093 + 0x6 C++
> interpreter.dll!interpreter(StackFrame & frame={...}) Line 2880 C++
> interpreter.dll!interpreterInvokeStatic(StackFrame & prevFrame={...}, Method * method=0x01ec55b8) Line 3285 C++
> interpreter.dll!Opcode_INVOKESTATIC(StackFrame & frame={...}) Line 2093 + 0x6 C++
> interpreter.dll!interpreter(StackFrame & frame={...}) Line 2880 C++
> interpreter.dll!interpreter_execute_method(Method * method=0x01e6f430, jvalue * return_value=0x00000000, jvalue * args=0x0013f9f8) Line 3188 C++
> interpreter.dll!JIT_execute_method(void * jh=0x00000000, _jmethodID * m=0x01e6f430, jvalue * return_value=0x00000000, jvalue * args=0x0013f9f8) Line 162 + 0x14 C++
> em.dll!DrlEMImpl::executeMethod(_jmethodID * meth=0x01e6f430, jvalue * return_value=0x00000000, jvalue * args=0x0013f9f8) Line 489 + 0x14 C++
> em.dll!ExecuteMethod(_jmethodID * meth=0x01e6f430, jvalue * return_value=0x00000000, jvalue * args=0x0013f9f8) Line 44 C++
> harmonyvm.dll!vm_execute_java_method_array(_jmethodID * method=0x01e6f430, jvalue * result=0x00000000, jvalue * args=0x0013f9f8) Line 51 + 0x19 C++
> harmonyvm.dll!vm_create_jthread(_jobject * * thread_object=0x0013fa70, JNIEnv_External * jni_env=0x01fe9360, _jobject * group=0x00000000, char * name=0x0013f3c8, unsigned char daemon=0) Line 556 + 0x1e C++
> harmonyvm.dll!vm_attach_internal(JNIEnv_External * * p_jni_env=0x0013fa74, _jobject * * java_thread=0x0013fa70, JavaVM_External * java_vm=0x00fc20a0, _jobject * group=0x00000000, char * name=0x0069250c, unsigned char daemon=0) Line 595 + 0x1c C++
> harmonyvm.dll!DestroyJavaVM(JavaVM_External * vm=0x00fc20a0) Line 1450 + 0x19 C++
> java.exe!00402527()
> java.exe!00402b82()
> java.exe!0040111a()
> hyprt.dll!11105ed8()
> java.exe!004011ae()
> To reproduce this problem run attached test with simple JVMTI agent that replaces java/lang/Thread class with the instrumented version (found in classes-instr directory). Test archive also includes javap-disassembled bytecodes of these classes to see the difference.
> In reference VMs (Sun and JRockit) instrumenting their system class java/lang/Thread in the same way works well.
> PLEASE NOTE, this test cannot be applied to Sun or JRockit JREs, because it requires instrumented version of their internal implementation of java/lang/Thread.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira