[vmkit-commits] [vmkit] r145373 - /vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Mon Nov 28 21:30:25 PST 2011
Author: wdietz2
Date: Mon Nov 28 23:30:25 2011
New Revision: 145373
URL: http://llvm.org/viewvc/llvm-project?rev=145373&view=rev
Log:
Fix thread status query, fixup thread join/end functionality (OpenJDK)
Modified:
vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc?rev=145373&r1=145372&r2=145373&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Mon Nov 28 23:30:25 2011
@@ -528,14 +528,24 @@
assert(javaThread->getVirtualTable());
+ // TODO: What happens if the thread throws an exception?
+
// Run the Thread::run() function
UserClass* thClass = (UserClass*)JavaObject::getClass(javaThread);
vm->upcalls->runThread->invokeIntSpecial(vm, thClass, javaThread);
+ // Indicate that the thread is done by clearing the eetop field.
+ // and notify all waiting threads.
+ vm->upcalls->eetop->setInstanceLongField(javaThread, 0);
+ JavaObject::acquire(javaThread);
+ JavaObject::notifyAll(javaThread);
+ JavaObject::release(javaThread);
+
// Remove the thread from the list.
if (!isDaemon) {
vm->threadSystem.leave();
}
+
}
/*
* java.lang.Thread
@@ -584,10 +594,9 @@
assert(thread);
Jnjvm* vm = JavaThread::get()->getJVM();
- jint status = vm->upcalls->threadStatus->getInstanceInt32Field(thread);
+ jlong InternalThread =vm->upcalls->eetop->getInstanceLongField(thread);
- // TODO: We don't actually maintain 'status'...
- RETURN_FROM_JNI(status != 0);
+ RETURN_FROM_JNI(InternalThread != 0);
END_JNI_EXCEPTION
More information about the vmkit-commits
mailing list