[vmkit-commits] [vmkit] r146348 - in /vmkit/trunk/lib/j3/ClassLib/OpenJDK: JavaUpcalls.cpp JavaUpcalls.h OpenJDK.inc

Will Dietz wdietz2 at illinois.edu
Sun Dec 11 12:43:00 PST 2011


Author: wdietz2
Date: Sun Dec 11 14:42:59 2011
New Revision: 146348

URL: http://llvm.org/viewvc/llvm-project?rev=146348&view=rev
Log:
OpenJDK: Call Thread.exit() when a thread exits

Removes thread from its threadgroup, clears fields, etc.

Modified:
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp?rev=146348&r1=146347&r2=146348&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.cpp Sun Dec 11 14:42:59 2011
@@ -229,6 +229,7 @@
 Class*      Classpath::RefHandlerClass;
 JavaMethod* Classpath::initRefHandler;
 JavaMethod* Classpath::threadStart;
+JavaMethod* Classpath::threadExit;
 
 const char * OpenJDKBootPath =
       OpenJDKJRE "/lib/rt.jar"
@@ -918,6 +919,10 @@
     UPCALL_METHOD(loader, "java/lang/Thread", "start",
         "()V", ACC_VIRTUAL);
 
+  threadExit =
+    UPCALL_METHOD(loader, "java/lang/Thread", "exit",
+        "()V", ACC_VIRTUAL);
+
   EnqueueReference =
     UPCALL_METHOD(loader, "java/lang/ref/Reference",  "enqueue", "()Z",
                   ACC_VIRTUAL);

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h?rev=146348&r1=146347&r2=146348&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/JavaUpcalls.h Sun Dec 11 14:42:59 2011
@@ -266,6 +266,7 @@
   ISOLATE_STATIC UserClass*  RefHandlerClass;
   ISOLATE_STATIC JavaMethod* initRefHandler;
   ISOLATE_STATIC JavaMethod* threadStart;
+  ISOLATE_STATIC JavaMethod* threadExit;
 
   ISOLATE_STATIC UserClass*  EnumClass;
   ISOLATE_STATIC UserClass*  assertionStatusDirectivesClass;

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=146348&r1=146347&r2=146348&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Sun Dec 11 14:42:59 2011
@@ -581,10 +581,13 @@
     } END_CATCH;
   }
 
+  // Call Thread.exit()
+  vm->upcalls->threadExit->invokeIntVirtual(vm, thClass, javaThread);
+
+  JavaObject::acquire(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);
+  // Notify all waiting threads
   JavaObject::notifyAll(javaThread);
   JavaObject::release(javaThread);
 





More information about the vmkit-commits mailing list