[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