[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