[vmkit-commits] [vmkit] r145374 - /vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
Will Dietz
wdietz2 at illinois.edu
Mon Nov 28 21:30:27 PST 2011
Author: wdietz2
Date: Mon Nov 28 23:30:27 2011
New Revision: 145374
URL: http://llvm.org/viewvc/llvm-project?rev=145374&view=rev
Log:
Properly handle Threads that subclass java.lang.Thread (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=145374&r1=145373&r2=145374&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Mon Nov 28 23:30:27 2011
@@ -528,11 +528,20 @@
assert(javaThread->getVirtualTable());
- // TODO: What happens if the thread throws an exception?
+ // Get the class for this Thread
+ UserClass* thClass = JavaObject::getClass(javaThread)->asClass();
+ assert(thClass);
+ assert(thClass->isResolved());
+
+ // Lookup the correct run() method to call...
+ const UTF8 * runName = thClass->classLoader->hashUTF8->lookupAsciiz("run");
+ const UTF8 * runType = thClass->classLoader->hashUTF8->lookupAsciiz("()V");
+ JavaMethod * meth = thClass->lookupMethodDontThrow(runName, runType, false, true, 0);
+ assert(meth);
- // Run the Thread::run() function
- UserClass* thClass = (UserClass*)JavaObject::getClass(javaThread);
- vm->upcalls->runThread->invokeIntSpecial(vm, thClass, javaThread);
+ // Run the thread...
+ // TODO: What happens if the thread throws an exception?
+ meth->invokeIntSpecial(vm, thClass, javaThread);
// Indicate that the thread is done by clearing the eetop field.
// and notify all waiting threads.
More information about the vmkit-commits
mailing list