You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by wj...@apache.org on 2007/10/09 19:06:38 UTC
svn commit: r583223 [2/2] - in /harmony/enhanced/drlvm/trunk/vm: gc_cc/src/
gc_gen/src/common/ include/open/ tests/unit/thread/
tests/unit/thread/utils/ thread/src/ thread/src/linux/ thread/src/win/
vmcore/include/ vmcore/src/class_support/ vmcore/src/...
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?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_generic.cpp Tue Oct 9 10:06:34 2007
@@ -46,7 +46,6 @@
#include "open/hythread.h"
#include "open/hythread_ext.h"
#include "open/jthread.h"
-#include "open/thread_externals.h"
#include "open/types.h"
#include "open/vm_util.h"
@@ -100,21 +99,16 @@
*/
static jint run_java_detach(jthread java_thread)
{
- static Method *detach = NULL;
- const char *method_name = "detach";
- const char *descriptor = "(Ljava/lang/Throwable;)V";
- jvalue args[2];
- JNIEnv *jni_env;
- Global_Env *vm_env;
- Class *thread_class;
-
assert(hythread_is_suspend_enabled());
- jni_env = jthread_get_JNI_env(java_thread);
- vm_env = jni_get_vm_env(jni_env);
- thread_class = vm_env->java_lang_Thread_Class;
+ JNIEnv *jni_env = jthread_get_JNI_env(java_thread);
+ Global_Env *vm_env = jni_get_vm_env(jni_env);
+ Class *thread_class = vm_env->java_lang_Thread_Class;
+ static Method *detach = NULL;
if (detach == NULL) {
+ const char *method_name = "detach";
+ const char *descriptor = "(Ljava/lang/Throwable;)V";
detach = class_lookup_method(thread_class, method_name, descriptor);
if (detach == NULL) {
TRACE("Failed to find thread's detach method " << descriptor <<
@@ -122,7 +116,9 @@
return TM_ERROR_INTERNAL;
}
}
+
// Initialize arguments.
+ jvalue args[2];
args[0].l = java_thread;
if (vm_env->IsVmShutdowning()) {
args[1].l = NULL;
@@ -145,6 +141,23 @@
}
/**
+ * Runs java.lang.Thread.detach() method
+ *
+ * This function will release any resources associated with the given java thread.
+ *
+ * @param[in] java_thread Java thread to be detached
+ */
+IDATA jthread_java_detach(jthread java_thread) {
+ assert(java_thread);
+ assert(hythread_is_suspend_enabled());
+
+ // could return error if detach throws an exception,
+ // keep exception and ignore an error
+ run_java_detach(java_thread);
+ return TM_ERROR_NONE;
+}
+
+/**
* Attaches thread current thread to VM.
*/
jint vm_attach(JavaVM * java_vm, JNIEnv ** p_jni_env)
@@ -223,47 +236,39 @@
*/
jint vm_detach(jthread java_thread)
{
- VM_thread *p_vm_thread;
-
assert(hythread_is_suspend_enabled());
- // could return error if detach throws an exception,
- // keep exception and ignore an error
- run_java_detach(java_thread);
+ hythread_t native_thread = jthread_get_native_thread(java_thread);
+ assert(native_thread);
+ vm_thread_t p_vm_thread = jthread_get_vm_thread(native_thread);
+ assert(p_vm_thread);
// Send Thread End event
- jvmti_send_thread_start_end_event(0);
+ jvmti_send_thread_start_end_event(p_vm_thread, 0);
hythread_suspend_disable();
- p_vm_thread = get_thread_ptr();
+ // change java_status for native thread
+ native_thread->java_status = TM_STATUS_ALLOCATED;
- // Notify GC about thread detaching.
- gc_thread_kill(&p_vm_thread->_gc_private_information);
- assert(p_vm_thread->gc_frames == 0);
+ if (native_thread == hythread_self()) {
+ // Notify GC about thread detaching.
+ // FIXME - GC notify detach thread works for current thread only
+ gc_thread_kill(&p_vm_thread->_gc_private_information);
+ assert(p_vm_thread->gc_frames == 0);
+ }
#ifdef PLATFORM_POSIX
// Remove guard page on the stack on linux
- remove_guard_stack();
-#endif
+ remove_guard_stack(p_vm_thread);
+#endif // PLATFORM_POSIX
- // Destroy current VM_thread pool.
+ // Destroy current VM_thread pool and zero VM_thread structure
jthread_deallocate_vm_thread_pool(p_vm_thread);
hythread_suspend_enable();
return JNI_OK;
-
-/** TODO: Check if we need these actions!!!
-#ifndef NDEBUG
- hythread_t tm_native_thread = jthread_get_native_thread();
- assert(tm_native_thread);
- assert(tm_native_thread == hythread_self());
-#endif
-
- // 3) Remove tm_thread_t pointer from java.lang.Thread object.
- vm_jthread_set_tm_data(jthread java_thread, NULL);
-*/
}
void vm_notify_obj_alive(void *p_obj)
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_basic.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_basic.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_basic.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_basic.cpp Tue Oct 9 10:06:34 2007
@@ -22,7 +22,6 @@
#include <open/jthread.h>
#include <open/hythread_ext.h>
-#include "open/thread_externals.h"
#include "vm_threads.h"
#include "jni.h"
@@ -30,9 +29,9 @@
#include "cxxlog.h"
static jmethodID jthread_get_run_method(JNIEnv * env, jthread java_thread);
-static jmethodID jthread_get_set_alive_method(JNIEnv * env, jthread java_thread);
-static IDATA jthread_associate_native_and_java_thread(JNIEnv * env,
- jthread java_thread, hythread_t native_thread, jobject weak_ref);
+static jfieldID jthread_get_alive_field(JNIEnv * env, jthread java_thread);
+static IDATA jthread_associate_native_and_java_thread(JNIEnv *jni_env,
+ jthread java_thread, vm_thread_t vm_thread, jobject weak_ref);
/**
* Creates new Java thread.
@@ -47,30 +46,85 @@
*/
IDATA jthread_create(JNIEnv *jni_env,
jthread java_thread,
- jthread_threadattr_t *attrs)
+ jthread_start_proc_data_t attrs)
{
return jthread_create_with_function(jni_env, java_thread, attrs);
} // jthread_create
-static IDATA HYTHREAD_PROC jthread_wrapper_proc(void *arg)
+/**
+ * Wrapper around user thread start proc.
+ * Used to perform some duty jobs right after thread is started
+ * and before thread is finished.
+ */
+int HYTHREAD_PROC jthread_wrapper_start_proc(void *arg)
{
- assert(arg);
- jthread_threadattr_t data = *(jthread_threadattr_t*) arg;
+ // store start procedure argument to local variable
+ jthread_start_proc_data start_proc_data = *(jthread_start_proc_data_t)arg;
STD_FREE(arg);
- // Association should be already done.
- hythread_t native_thread = hythread_self();
- assert(native_thread);
+ // get hythread global lock
+ IDATA status = hythread_global_lock();
+ assert(status == TM_ERROR_NONE);
+
+ // get native thread
+ hythread_t native_thread = start_proc_data.hy_data.thread;
+
+ // check hythread library state
+ if (hythread_lib_state() != TM_LIBRARY_STATUS_INITIALIZED) {
+ // set TERMINATED state
+ status = hythread_set_state(native_thread, TM_THREAD_STATE_TERMINATED);
+ assert(status == TM_ERROR_NONE);
+
+ // set hythread_self()
+ hythread_set_self(native_thread);
+ assert(native_thread == hythread_self());
+
+ // release thread structure data
+ hythread_detach_ex(native_thread);
+
+ // zero hythread_self() because we don't do it in hythread_detach_ex()
+ hythread_set_self(NULL);
+
+ TRACE(("TM: native thread terminated due to shutdown: native: %p tm: %p",
+ apr_os_thread_current(), native_thread));
+
+ // FIXME - uncomment after TM state transition complete
+ //STD_FREE(native_thread);
+
+ // release hythread global lock
+ status = hythread_global_unlock();
+ assert(status == TM_ERROR_NONE);
+
+ return 0;
+ }
+
+ // register to group and set ALIVE state
+ status = hythread_set_to_group(native_thread, start_proc_data.hy_data.group);
+ assert(status == TM_ERROR_NONE);
+
+ // set hythread_self()
+ hythread_set_self(native_thread);
+ assert(native_thread == hythread_self());
+
+ // set priority
+ status = hythread_set_priority(native_thread,
+ hythread_get_priority(native_thread));
+ // FIXME - cannot set priority
+ //assert(status == TM_ERROR_NONE);
+
+ // get java thread
vm_thread_t vm_thread = jthread_get_vm_thread_unsafe(native_thread);
assert(vm_thread);
jobject java_thread = vm_thread->java_thread;
+ assert(java_thread);
+ // attach java thread to VM
JNIEnv *jni_env;
- IDATA status = vm_attach(data.java_vm, &jni_env);
+ status = vm_attach(start_proc_data.java_vm, &jni_env);
assert(status == JNI_OK);
vm_thread->jni_env = jni_env;
- vm_thread->daemon = data.daemon;
+ vm_thread->daemon = start_proc_data.daemon;
TRACE(("TM: Java thread started: id=%d OS_handle=%p",
hythread_get_id(native_thread), apr_os_thread_current()));
@@ -80,28 +134,76 @@
assert(status == TM_ERROR_NONE);
}
+ // set RUNNABLE state
+ status = hythread_thread_lock(native_thread);
+ assert(status == TM_ERROR_NONE);
+ IDATA state = hythread_get_state(native_thread);
+ status = hythread_set_state(native_thread, state | TM_THREAD_STATE_RUNNABLE);
+ assert(status == TM_ERROR_NONE);
+ status = hythread_thread_unlock(native_thread);
+ assert(status == TM_ERROR_NONE);
+
+ // increase started thread count
+ jthread_start_count();
+
// Send Thread Start event.
assert(hythread_is_alive(native_thread));
- jni_env->CallVoidMethod(java_thread,
- jthread_get_set_alive_method(jni_env, java_thread), true);
- jvmti_send_thread_start_end_event(1);
- jthread_start_count();
+ jni_env->SetBooleanField(java_thread,
+ jthread_get_alive_field(jni_env, java_thread), true);
+ jvmti_send_thread_start_end_event(vm_thread, 1);
+
+ // release hythread global lock
+ status = hythread_global_unlock();
+ assert(status == TM_ERROR_NONE);
- if (data.proc != NULL) {
- data.proc(data.jvmti_env, jni_env, (void*)data.arg);
+ jvmtiStartFunction start_jvmti_proc = start_proc_data.proc;
+ if (start_jvmti_proc != NULL) {
+ // start JVMTI thread
+ start_jvmti_proc(start_proc_data.jvmti_env, jni_env,
+ (void*)start_proc_data.arg);
} else {
- // for jthread_create();
+ // start Java thread
jni_env->CallVoidMethodA(java_thread,
jthread_get_run_method(jni_env, java_thread), NULL);
}
- status = jthread_detach(java_thread);
+ // run j.l.Thread.detach(), don't get hythread global lock here
+ status = jthread_java_detach(java_thread);
+ assert(status == TM_ERROR_NONE);
+
+ // get hythread global lock
+ status = hythread_global_lock();
+ assert(status == TM_ERROR_NONE);
+
+ // detach vm thread
+ status = jthread_vm_detach(vm_thread);
+ assert(status == TM_ERROR_NONE);
+
+ // set TERMINATED thread
+ status = hythread_thread_lock(native_thread);
+ assert(status == TM_ERROR_NONE);
+ // FIXME - remove INTERRUPTED state after TM state transition complete
+ state = hythread_get_state(native_thread);
+ status = hythread_set_state(native_thread,
+ TM_THREAD_STATE_TERMINATED | (TM_THREAD_STATE_INTERRUPTED & state));
+ assert(status == TM_ERROR_NONE);
+ status = hythread_thread_unlock(native_thread);
+ assert(status == TM_ERROR_NONE);
TRACE(("TM: Java thread finished: id=%d OS_handle=%p",
- hythread_get_id(native_thread), apr_os_thread_current()));
+ hythread_get_id(native_thread), apr_os_thread_current()));
- return status;
-} // jthread_wrapper_proc
+ hythread_detach_ex(native_thread);
+
+ // FIXME - uncomment after TM state transition complete
+ //STD_FREE(vm_thread);
+
+ // release hythread global lock
+ status = hythread_global_unlock();
+ assert(status == TM_ERROR_NONE);
+
+ return 0;
+} // jthread_wrapper_start_proc
/**
* Creates new Java thread with specific execution function.
@@ -121,7 +223,7 @@
*/
IDATA jthread_create_with_function(JNIEnv *jni_env,
jthread java_thread,
- jthread_threadattr_t *given_attrs)
+ jthread_start_proc_data_t given_attrs)
{
if (jni_env == NULL || java_thread == NULL || given_attrs == NULL) {
return TM_ERROR_NULL_POINTER;
@@ -134,8 +236,8 @@
vm_thread->java_thread = jni_env->NewGlobalRef(java_thread);
// prepare args for wrapper_proc
- jthread_threadattr_t *attrs =
- (jthread_threadattr_t*)STD_MALLOC(sizeof(jthread_threadattr_t));
+ jthread_start_proc_data_t attrs =
+ (jthread_start_proc_data_t)STD_MALLOC(sizeof(jthread_start_proc_data));
if (attrs == NULL) {
return TM_ERROR_OUT_OF_MEMORY;
}
@@ -158,7 +260,7 @@
}
status = hythread_create_ex(native_thread, NULL, attrs->stacksize,
- attrs->priority, jthread_wrapper_proc, attrs);
+ attrs->priority, jthread_wrapper_start_proc, NULL, attrs);
TRACE(("TM: Created thread: id=%d", hythread_get_id(native_thread)));
@@ -186,14 +288,14 @@
hythread_t native_thread = hythread_self();
assert(native_thread);
- IDATA status = jthread_associate_native_and_java_thread(jni_env, java_thread,
- native_thread, NULL);
+ vm_thread_t vm_thread = jthread_get_vm_thread(native_thread);
+ assert(vm_thread);
+ IDATA status = jthread_associate_native_and_java_thread(jni_env,
+ java_thread, vm_thread, NULL);
if (status != TM_ERROR_NONE) {
return status;
}
- vm_thread_t vm_thread = jthread_get_vm_thread(native_thread);
- assert(vm_thread);
vm_thread->java_thread = jni_env->NewGlobalRef(java_thread);
vm_thread->jni_env = jni_env;
vm_thread->daemon = daemon;
@@ -204,7 +306,7 @@
// Send Thread Start event.
assert(hythread_is_alive(native_thread));
- jvmti_send_thread_start_end_event(1);
+ jvmti_send_thread_start_end_event(vm_thread, 1);
jthread_start_count();
TRACE(("TM: Current thread attached to jthread=%p", java_thread));
@@ -216,41 +318,39 @@
*
* @param[in] env JNI environment that will be associated with the created Java thread
* @param[in] java_thread the Java thread for the association
- * @param[in] weak_ref java.lang.WeakReference to the <code>java_thread</code> that used for native resource deletion
- * @param[in] dead_thread the native thread for the association
* @return the native thread
*/
-jlong jthread_thread_init(JNIEnv *env,
+jlong jthread_thread_init(JNIEnv *jni_env,
jthread java_thread,
jobject weak_ref,
hythread_t dead_thread)
{
- hythread_t native_thread = NULL;
+ vm_thread_t vm_thread = NULL;
if (dead_thread) {
- native_thread = (hythread_t)((IDATA) dead_thread);
- vm_thread_t vm_thread = jthread_get_vm_thread_unsafe(native_thread);
+ vm_thread = jthread_get_vm_thread_unsafe(dead_thread);
assert(vm_thread);
if (vm_thread->weak_ref) {
// delete used weak reference
- env->DeleteGlobalRef(vm_thread->weak_ref);
+ jni_env->DeleteGlobalRef(vm_thread->weak_ref);
}
} else {
- native_thread = (hythread_t)jthread_allocate_thread();
+ vm_thread = jthread_allocate_thread();
}
-
- IDATA status = hythread_struct_init(native_thread);
+
+ IDATA status = hythread_struct_init((hythread_t)vm_thread);
if (status != TM_ERROR_NONE) {
return 0;
}
- status = jthread_associate_native_and_java_thread(env, java_thread,
- native_thread, weak_ref);
+ status = jthread_associate_native_and_java_thread(jni_env,
+ java_thread, vm_thread, weak_ref);
if (status != TM_ERROR_NONE) {
return 0;
}
- return (jlong)((IDATA)native_thread);
+ return (jlong)((IDATA)vm_thread);
} // jthread_thread_init
+
/**
* Detaches the selected thread from java VM.
*
@@ -260,62 +360,90 @@
*/
IDATA jthread_detach(jthread java_thread)
{
- // Check input arg
assert(java_thread);
assert(hythread_is_suspend_enabled());
- TRACE(("TM: jthread_detach %x", hythread_self()));
+ // detach java thread
+ IDATA status = jthread_java_detach(java_thread);
+ // get hythread global lock
+ IDATA lock_status = hythread_global_lock();
+ assert(lock_status == TM_ERROR_NONE);
+
+ // get vm_thread
hythread_t native_thread = jthread_get_native_thread(java_thread);
assert(native_thread);
vm_thread_t vm_thread = jthread_get_vm_thread(native_thread);
assert(vm_thread);
- JNIEnv *jni_env = vm_thread->jni_env;
- IDATA status;
+ // detach vm thread
+ status |= jthread_vm_detach(vm_thread);
+
+ // release hythread global lock
+ lock_status = hythread_global_unlock();
+ assert(lock_status == TM_ERROR_NONE);
+
+ return status;
+} // jthread_detach
+
+/**
+ * Detaches the selected vm_thread.
+ *
+ * This function will release any resources associated with the given vm_thread.
+ *
+ * @param[in] java_thread Java thread to be detached
+ */
+IDATA jthread_vm_detach(vm_thread_t vm_thread)
+{
+ assert(vm_thread);
+ assert(hythread_is_suspend_enabled());
+
+ TRACE(("TM: jthread_vm_detach(%p)", vm_thread));
if (!vm_thread->daemon) {
- status = hythread_decrease_nondaemon_threads_count(native_thread, 1);
+ hythread_t native_thread = (hythread_t)vm_thread;
+ IDATA status = hythread_decrease_nondaemon_threads_count(native_thread, 1);
assert(status == TM_ERROR_NONE);
}
// Detach from VM.
- status = vm_detach(java_thread);
+ jobject java_thread = vm_thread->java_thread;
+ JNIEnv *jni_env = vm_thread->jni_env;
+ jint status = vm_detach(java_thread);
if (status != JNI_OK) {
return TM_ERROR_INTERNAL;
}
+ // FIXME - uncomment after TM state transition complete
+ //status = jthread_associate_native_and_java_thread(java_thread, NULL);
+ //if (status != TM_ERROR_NONE) {
+ // return status;
+ //}
+
// Delete global reference to current thread object.
- jni_env->DeleteGlobalRef(vm_thread->java_thread);
- // jthread_self() will return NULL now.
- vm_thread->java_thread = NULL;
+ jni_env->DeleteGlobalRef(java_thread);
// Decrease alive thread counter
jthread_end_count();
assert(hythread_is_suspend_enabled());
return TM_ERROR_NONE;
-} // jthread_detach
+} // jthread_vm_detach
static IDATA
jthread_associate_native_and_java_thread(JNIEnv * jni_env,
jthread java_thread,
- hythread_t native_thread,
+ vm_thread_t vm_thread,
jobject weak_ref)
{
- if ((jni_env == NULL) || (java_thread == NULL)
- || (native_thread == NULL))
+ if ((jni_env == NULL) || (java_thread == NULL))
{
return TM_ERROR_NULL_POINTER;
}
-
- vm_thread_t vm_thread = jthread_get_vm_thread_unsafe(native_thread);
- assert(vm_thread);
-
- vm_thread->weak_ref =
+ vm_thread->weak_ref =
(weak_ref) ? jni_env->NewGlobalRef(weak_ref) : NULL;
// Associate java thread with native thread
- vm_jthread_set_tm_data(java_thread, native_thread);
+ vm_jthread_set_tm_data(java_thread, vm_thread);
return TM_ERROR_NONE;
} // jthread_associate_native_and_java_thread
@@ -589,27 +717,27 @@
static jmethodID jthread_get_run_method(JNIEnv * env, jthread java_thread)
{
- static jmethodID run_method = NULL;
+ static jmethodID runImpl_method = NULL;
TRACE("run method find enter");
- if (!run_method) {
+ if (!runImpl_method) {
jclass clazz = env->GetObjectClass(java_thread);
- run_method = env->GetMethodID(clazz, "runImpl", "()V");
+ runImpl_method = env->GetMethodID(clazz, "runImpl", "()V");
}
TRACE("run method find exit");
- return run_method;
+ return runImpl_method;
} // jthread_get_run_method
-static jmethodID jthread_get_set_alive_method(JNIEnv * env, jthread java_thread)
+static jfieldID jthread_get_alive_field(JNIEnv * env, jthread java_thread)
{
- static jmethodID set_alive_method = NULL;
+ static jfieldID isAlive_field = NULL;
TRACE("run method find enter");
- if (!set_alive_method) {
+ if (!isAlive_field) {
jclass clazz = env->GetObjectClass(java_thread);
- set_alive_method = env->GetMethodID(clazz, "setAlive", "(Z)V");
+ isAlive_field = env->GetFieldID(clazz, "isAlive", "Z");
}
TRACE("run method find exit");
- return set_alive_method;
+ return isAlive_field;
} // jthread_get_run_method
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_monitors.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_monitors.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_monitors.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_monitors.cpp Tue Oct 9 10:06:34 2007
@@ -22,7 +22,6 @@
#include <open/hythread_ext.h>
#include <open/jthread.h>
#include <open/hythread_ext.h>
-#include <open/thread_externals.h>
#include "vm_threads.h"
#include "jni.h"
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_suspend.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_suspend.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_suspend.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_java_suspend.cpp Tue Oct 9 10:06:34 2007
@@ -22,7 +22,6 @@
#include <open/jthread.h>
#include <open/hythread_ext.h>
-#include <open/thread_externals.h>
#include "vm_threads.h"
/**
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_manager.cpp Tue Oct 9 10:06:34 2007
@@ -20,8 +20,6 @@
*/
-#include "open/thread_externals.h"
-
#include "platform_lowlevel.h"
#include <assert.h>
@@ -101,9 +99,6 @@
// zero VM_thread structure
memset(&vm_thread->java_thread, 0,
sizeof(VM_thread) - offsetof(VM_thread, java_thread));
-
- // change java_status
- ((hythread_t)(vm_thread))->java_status = TM_STATUS_ALLOCATED;
}
vm_thread_t jthread_get_vm_thread_ptr_safe(jobject thread_obj)
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_instr.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_instr.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_instr.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_instr.cpp Tue Oct 9 10:06:34 2007
@@ -23,7 +23,6 @@
#include <open/ti_thread.h>
#include <open/hythread_ext.h>
#include <open/jthread.h>
-#include <open/thread_externals.h>
#include "vm_threads.h"
#include "object_handles.h"
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_others.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_others.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_others.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_others.cpp Tue Oct 9 10:06:34 2007
@@ -23,7 +23,6 @@
#include <open/jthread.h>
#include <open/hythread_ext.h>
#include <open/ti_thread.h>
-#include <open/thread_externals.h>
#include "vm_threads.h"
#define THREAD_CONTENTION_MONITORING_SUPPORTED 1
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_timing.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_timing.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_timing.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/thread/thread_ti_timing.cpp Tue Oct 9 10:06:34 2007
@@ -23,7 +23,6 @@
#include <open/ti_thread.h>
#include <open/hythread_ext.h>
#include <open/jthread.h>
-#include <open/thread_externals.h>
#include "vm_threads.h"
#include "apr_thread_ext.h"
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_em64t.cpp Tue Oct 9 10:06:34 2007
@@ -393,7 +393,7 @@
if (available_stack_size < required_size) {
if (available_stack_size < get_guard_stack_size()) {
- remove_guard_stack();
+ remove_guard_stack(p_TLS_vmthread);
}
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
@@ -416,7 +416,7 @@
return get_restore_stack_size() < available_stack_size;
}
-void remove_guard_stack() {
+void remove_guard_stack(vm_thread_t vm_thread) {
int err;
char* stack_addr = (char*) get_stack_addr();
size_t stack_size = get_stack_size();
@@ -433,7 +433,7 @@
err = sigaltstack (&sigalt, NULL);
- p_TLS_vmthread->restore_guard_page = true;
+ vm_thread->restore_guard_page = true;
}
bool check_stack_overflow(siginfo_t *info, ucontext_t *uc) {
@@ -477,7 +477,7 @@
throw_from_sigcontext(
uc, env->java_lang_StackOverflowError_Class);
} else {
- remove_guard_stack();
+ remove_guard_stack(p_TLS_vmthread);
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
}
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ia32.cpp Tue Oct 9 10:06:34 2007
@@ -440,7 +440,7 @@
if (available_stack_size < required_size) {
if (available_stack_size < get_guard_stack_size()) {
- remove_guard_stack();
+ remove_guard_stack(p_TLS_vmthread);
}
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
@@ -463,7 +463,7 @@
return get_restore_stack_size() < available_stack_size;
}
-void remove_guard_stack() {
+void remove_guard_stack(vm_thread_t vm_thread) {
int err;
char* stack_addr = (char*) get_stack_addr();
size_t stack_size = get_stack_size();
@@ -482,7 +482,7 @@
err = sigaltstack (&sigalt, NULL);
- p_TLS_vmthread->restore_guard_page = true;
+ vm_thread->restore_guard_page = true;
}
bool check_stack_overflow(siginfo_t *info, ucontext_t *uc) {
@@ -526,9 +526,10 @@
throw_from_sigcontext(
uc, env->java_lang_StackOverflowError_Class);
} else {
- remove_guard_stack();
+ vm_thread_t vm_thread = p_TLS_vmthread;
+ remove_guard_stack(vm_thread);
exn_raise_by_class(env->java_lang_StackOverflowError_Class);
- p_TLS_vmthread->restore_guard_page = true;
+ vm_thread->restore_guard_page = true;
}
}
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/linux/signals_ipf.cpp Tue Oct 9 10:06:34 2007
@@ -336,7 +336,7 @@
if (available_stack_size < required_size) {
if (available_stack_size < get_guard_stack_size()) {
- remove_guard_stack();
+ remove_guard_stack(p_TLS_vmthread);
}
exn_raise_by_name("java/lang/StackOverflowError");
return false;
@@ -359,7 +359,7 @@
}
-void remove_guard_stack() {
+void remove_guard_stack(vm_thread_t vm_thread) {
int err;
char* stack_addr = (char*) get_stack_addr();
size_t stack_size = get_stack_size();
@@ -418,9 +418,10 @@
throw_from_sigcontext(
uc, env->java_lang_StackOverflowError_Class);
} else {
- remove_guard_stack();
+ vm_thread_t vm_thread = p_TLS_vmthread;
+ remove_guard_stack(vm_thread);
exn_raise_by_name("java/lang/StackOverflowError");
- p_TLS_vmthread->restore_guard_page = true;
+ vm_thread->restore_guard_page = true;
}
}
}
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp?rev=583223&r1=583222&r2=583223&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/util/win/ia32_em64t/nt_exception_filter_common.cpp Tue Oct 9 10:06:34 2007
@@ -196,7 +196,7 @@
jthread_self_vm_thread_unsafe()->restore_guard_page = false;
}
-void remove_guard_stack() {
+void remove_guard_stack(vm_thread_t vm_thread) {
void* stack_addr = get_stack_addr();
size_t stack_size = get_stack_size();
size_t page_size = get_guard_page_size();
@@ -204,7 +204,7 @@
DWORD oldProtect;
assert(((size_t)(&stack_addr)) > ((size_t)((char*)stack_addr - stack_size + 3 * page_size)));
- p_TLS_vmthread->restore_guard_page = true;
+ vm_thread->restore_guard_page = true;
if (!VirtualProtect((char*)stack_addr - stack_size + page_size + guard_stack_size,
page_size, PAGE_READWRITE, &oldProtect)) {
@@ -241,7 +241,7 @@
size_t available_stack_size = get_available_stack_size();
if (available_stack_size < required_size) {
if (available_stack_size < get_guard_stack_size()) {
- remove_guard_stack();
+ remove_guard_stack(p_TLS_vmthread);
}
Global_Env *env = VM_Global_State::loader_env;
exn_raise_by_class(env->java_lang_StackOverflowError_Class);