[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