You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by gs...@apache.org on 2006/12/13 16:01:40 UTC

svn commit: r486680 - in /harmony/enhanced/drlvm/trunk/vm: thread/src/thread_java_basic.c vmcore/src/jvmti/jvmti_event.cpp vmcore/src/jvmti/jvmti_roots.cpp vmcore/src/jvmti/jvmti_stack.cpp vmcore/src/thread/thread_generic.cpp

Author: gshimansky
Date: Wed Dec 13 07:01:39 2006
New Revision: 486680

URL: http://svn.apache.org/viewvc?view=rev&rev=486680
Log:
Applied HARMONY-2377 [drlvm][jvmti] TI events are generated by VM in the incorrect order

Tests passed on Ubuntu6 x86, Windows 2003 server and SuSE9 x86_64


Modified:
    harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_roots.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_stack.cpp
    harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp

Modified: harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c?view=diff&rev=486680&r1=486679&r2=486680
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c (original)
+++ harmony/enhanced/drlvm/trunk/vm/thread/src/thread_java_basic.c Wed Dec 13 07:01:39 2006
@@ -277,9 +277,6 @@
         countdown_nondaemon_threads(tm_native_thread);
     }
 
-    // Send Thread End event
-    jvmti_send_thread_start_end_event(0);
-
     // Detach from VM.
     status = vm_detach(java_thread);
     if (status != JNI_OK) return TM_ERROR_INTERNAL;

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp?view=diff&rev=486680&r1=486679&r2=486680
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_event.cpp Wed Dec 13 07:01:39 2006
@@ -427,7 +427,7 @@
     ti->nextPhase(JVMTI_PHASE_LIVE);
     tmn_suspend_disable();
     ObjectHandle hThread = oh_allocate_local_handle();
-    hThread->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+    hThread->object = (Java_java_lang_Thread *)jthread_self()->object;
     tmn_suspend_enable();
     // Send VM_INIT TI events
     TIEnv *ti_env = ti->getEnvironments();
@@ -1403,7 +1403,7 @@
     exn_object->object = exn;
 
     ObjectHandle hThread = oh_allocate_local_handle();
-    hThread->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+    hThread->object = (Java_java_lang_Thread *)jthread_self()->object;
 
     TIEnv *ti_env = ti->getEnvironments();
     TIEnv *next_env;
@@ -1520,7 +1520,7 @@
     // Create local handles frame
     NativeObjectHandles lhs;
     ObjectHandle hThread = oh_allocate_local_handle();
-    hThread->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+    hThread->object = (Java_java_lang_Thread *)jthread_self()->object;
     tmn_suspend_enable();
 
     TIEnv *ti_env = ti->getEnvironments();
@@ -1576,7 +1576,7 @@
 
     tmn_suspend_disable();
     ObjectHandle hThread = oh_allocate_local_handle();
-    hThread->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+    hThread->object = (Java_java_lang_Thread *)jthread_self()->object;
     tmn_suspend_enable();
 
     TIEnv *ti_env = ti->getEnvironments();
@@ -1719,7 +1719,7 @@
     ObjectHandle hClass = struct_Class_to_jclass(clss);
     tmn_suspend_disable(); // -----------vv
     ObjectHandle hThread = oh_allocate_local_handle();
-    hThread->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+    hThread->object = (Java_java_lang_Thread *)jthread_self()->object;
     tmn_suspend_enable();   // -----------^^
 
     TIEnv *ti_env = ti->getEnvironments();
@@ -1748,7 +1748,7 @@
                     TRACE2("jvmti.class.cp", "Class prepare event, class name = " << clss->get_name()->bytes);
                     tmn_suspend_disable(); // -------------------------------vv
                     ObjectHandle hThreadLocal = oh_allocate_local_handle();
-                    hThreadLocal->object = (Java_java_lang_Thread *)jthread_get_java_thread(hythread_self())->object;
+                    hThreadLocal->object = (Java_java_lang_Thread *)jthread_self()->object;
                     tmn_suspend_enable(); // --------------------------------^^
                     func((jvmtiEnv *)ti_env, jni_env, (jthread)hThreadLocal, (jclass)hClass);
                     oh_discard_local_handle( hThreadLocal );
@@ -1768,14 +1768,14 @@
         case JVMTI_EVENT_THREAD_START:
         case JVMTI_EVENT_THREAD_END: {
             ((jvmtiEventThreadStart)callback_func)((jvmtiEnv*)ti_env, jni_env, 
-                    jthread_get_java_thread(hythread_self()));
+                    jthread_self());
             break;
         }
         case JVMTI_EVENT_MONITOR_CONTENDED_ENTER: 
         case JVMTI_EVENT_MONITOR_CONTENDED_ENTERED: {
             jobject monitor = va_arg(args, jobject);
             ((jvmtiEventMonitorContendedEnter) callback_func)((jvmtiEnv*)ti_env, 
-                    jni_env, jthread_get_java_thread(hythread_self()), monitor);
+                    jni_env, jthread_self(), monitor);
 
             break;
         }
@@ -1784,7 +1784,7 @@
             jobject monitor = va_arg(args, jobject);
             jlong timeout   = va_arg(args, jlong);
             ((jvmtiEventMonitorWait)callback_func)((jvmtiEnv*)ti_env, jni_env, 
-                    jthread_get_java_thread(hythread_self()), monitor, timeout);
+                    jthread_self(), monitor, timeout);
             break;
         }
 
@@ -1792,7 +1792,7 @@
             jobject monitor = va_arg(args, jobject);
             jboolean is_timed_out   = va_arg(args, jint);
             ((jvmtiEventMonitorWaited)callback_func)((jvmtiEnv*)ti_env, jni_env, 
-                    jthread_get_java_thread(hythread_self()), monitor, is_timed_out);
+                    jthread_self(), monitor, is_timed_out);
             break;
         }
         default: 
@@ -1905,18 +1905,30 @@
 }
 
 void jvmti_send_wait_monitor_event(jobject monitor, jlong timeout) {
+    if (JVMTI_PHASE_LIVE != VM_Global_State::loader_env->TI->getPhase())
+        return;
+
     TRACE2("jvmti.monitor.wait", "Monitor wait event, monitor = " << monitor);
+
     process_jvmti_event(JVMTI_EVENT_MONITOR_WAIT, 1, monitor, timeout);
-        }
+}
 
 void jvmti_send_waited_monitor_event(jobject monitor, jboolean is_timed_out) {
+    if (JVMTI_PHASE_LIVE != VM_Global_State::loader_env->TI->getPhase())
+        return;
+
     TRACE2("jvmti.monitor.waited", "Monitor wait event, monitor = " << monitor);
+
     process_jvmti_event(JVMTI_EVENT_MONITOR_WAITED, 1, monitor, is_timed_out);
-    }
+}
 
 void jvmti_send_contended_enter_or_entered_monitor_event(jobject monitor,
-    int isEnter) {
+        int isEnter) {
+    if (JVMTI_PHASE_LIVE != VM_Global_State::loader_env->TI->getPhase())
+        return;
+
     TRACE2("jvmti.monitor.enter", "Monitor enter event, monitor = " << monitor << " is enter= " << isEnter);
+
     (isEnter)?process_jvmti_event(JVMTI_EVENT_MONITOR_CONTENDED_ENTER, 1, monitor)
             :process_jvmti_event(JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, 1, monitor);
 }

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_roots.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_roots.cpp?view=diff&rev=486680&r1=486679&r2=486680
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_roots.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_roots.cpp Wed Dec 13 07:01:39 2006
@@ -323,7 +323,7 @@
     state->root_kind = JVMTI_HEAP_ROOT_THREAD;
     state->thread_tag = ti_env->tags->get(
             (Managed_Object_Handle)
-            jthread_get_java_thread(hythread_self())->object);
+            jthread_self()->object);
 
     if (interpreter_enabled()) {
         interpreter.interpreter_ti_enumerate_thread((jvmtiEnv*)ti_env, thread);

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_stack.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_stack.cpp?view=diff&rev=486680&r1=486679&r2=486680
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_stack.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/jvmti/jvmti_stack.cpp Wed Dec 13 07:01:39 2006
@@ -43,7 +43,7 @@
 jthread getCurrentThread() {
     tmn_suspend_disable();
     ObjectHandle hThread = oh_allocate_local_handle();
-    jthread thread = jthread_get_java_thread(hythread_self());
+    jthread thread = jthread_self();
     if(thread) {
         hThread->object = (Java_java_lang_Thread *)thread->object;
     } else {

Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp?view=diff&rev=486680&r1=486679&r2=486680
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp Wed Dec 13 07:01:39 2006
@@ -213,6 +213,9 @@
     status = run_java_detach(java_thread);
     if (status != JNI_OK) return status;
 
+    // Send Thread End event
+    jvmti_send_thread_start_end_event(0);
+
     hythread_suspend_disable();
 
     p_vm_thread = get_thread_ptr();