[vmkit-commits] [vmkit] r180484 - Final implementation of VMThread.getState

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:16:56 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:15:25 2013
New Revision: 180484

URL: http://llvm.org/viewvc/llvm-project?rev=180484&view=rev
Log:
Final implementation of VMThread.getState
(cherry picked from commit 1317c61e76c7b97169f5ac60a20025fe9dc446b8)

Modified:
    vmkit/trunk/include/vmkit/ObjectLocks.h
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
    vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
    vmkit/trunk/lib/j3/VMCore/JavaThread.h
    vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp

Modified: vmkit/trunk/include/vmkit/ObjectLocks.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/include/vmkit/ObjectLocks.h?rev=180484&r1=180483&r2=180484&view=diff
==============================================================================
--- vmkit/trunk/include/vmkit/ObjectLocks.h (original)
+++ vmkit/trunk/include/vmkit/ObjectLocks.h Thu Apr 25 12:15:25 2013
@@ -44,11 +44,11 @@ public:
   ///
   FatLock* waitsOn;
 
-  static const unsigned int StateRunning = 0;
-  static const unsigned int StateWaiting = 1;
-  static const unsigned int StateTimeWaiting = 2;
-  static const unsigned int StateInterrupted = 3;
-  static const unsigned int StateBlocked = 4;
+  static const unsigned int StateRunning = 1;
+  static const unsigned int StateWaiting = 2;
+  static const unsigned int StateTimeWaiting = 3;
+  static const unsigned int StateInterrupted = 4;
+  static const unsigned int StateBlocked = 5;
 
   /// state - The current state of this thread: Running, Waiting or Interrupted.
   uint32 state;

Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc?rev=180484&r1=180483&r2=180484&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 12:15:25 2013
@@ -240,7 +240,7 @@ JavaObject* vmthread) {
     return obj;
   }
   else {
-  	switch (th->lockingThread.state) {
+  	switch (th->status) {
   		case vmkit::LockingThread::StateWaiting:
   			obj = vm->asciizToStr("WAITING");
   			return obj;
@@ -250,12 +250,10 @@ JavaObject* vmthread) {
   		case vmkit::LockingThread::StateBlocked:
   			obj = vm->asciizToStr("BLOCKED");
   			return obj;
-  		default:
+  		default: // both RUNNABLE and INTERRUPTED
   			obj = vm->asciizToStr("RUNNABLE");
   			return obj;
   	}
-  	obj = vm->asciizToStr("TERMINATED");
-  	return obj;
   }
   
   END_NATIVE_EXCEPTION

Modified: vmkit/trunk/lib/j3/VMCore/JavaObject.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaObject.cpp?rev=180484&r1=180483&r2=180484&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaObject.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaObject.cpp Thu Apr 25 12:15:25 2013
@@ -84,7 +84,9 @@ void JavaObject::waitIntern(
     UNREACHABLE();
   }
 
+  thread->status = (timed)? vmkit::LockingThread::StateTimeWaiting: vmkit::LockingThread::StateWaiting;
   bool interrupted = thread->lockingThread.wait(self, table, info, timed);
+  thread->status = vmkit::LockingThread::StateRunning;
 
   if (interrupted) {
     thread->getJVM()->interruptedException(self);
@@ -236,15 +238,14 @@ void JavaObject::overflowThinLock(JavaOb
 
 void JavaObject::acquire(JavaObject* self) {
   llvm_gcroot(self, 0);
-  JavaThread::get()->lockingThread.state = vmkit::LockingThread::StateBlocked;
+  JavaThread::get()->status = vmkit::LockingThread::StateBlocked;
   vmkit::ThinLock::acquire(self, JavaThread::get()->getJVM()->lockSystem);
-  JavaThread::get()->lockingThread.state = vmkit::LockingThread::StateRunning;
+  JavaThread::get()->status = vmkit::LockingThread::StateRunning;
 }
 
 void JavaObject::release(JavaObject* self) {
   llvm_gcroot(self, 0);
   vmkit::ThinLock::release(self, JavaThread::get()->getJVM()->lockSystem);
-  JavaThread::get()->lockingThread.state = vmkit::LockingThread::StateRunning;
 }
 
 bool JavaObject::owner(JavaObject* self) {

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180484&r1=180483&r2=180484&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 12:15:25 2013
@@ -94,6 +94,8 @@ public:
   ///
   JNILocalReferences* localJNIRefs;
 
+  int status;
+
 
   JavaObject** pushJNIRef(JavaObject* obj) {
     llvm_gcroot(obj, 0);
@@ -111,6 +113,7 @@ public:
   /// JavaThread - Empty constructor, used to get the VT.
   ///
   JavaThread() {
+	  status = vmkit::LockingThread::StateRunning;
   }
 
   /// ~JavaThread - Delete any potential malloc'ed objects used by this thread.

Modified: vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp?rev=180484&r1=180483&r2=180484&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp (original)
+++ vmkit/trunk/lib/vmkit/CommonThread/ObjectLocks.cpp Thu Apr 25 12:15:25 2013
@@ -436,7 +436,7 @@ bool LockingThread::wait(
     return true;
   }
   
-  this->state = (timed && (info->tv_sec > 0 || info->tv_usec>0))? LockingThread::StateTimeWaiting : LockingThread::StateWaiting;
+  this->state = LockingThread::StateWaiting;
 
   if (l->firstThread) {
     assert(l->firstThread->prevWaiting && l->firstThread->nextWaiting &&
@@ -500,7 +500,7 @@ bool LockingThread::wait(
       this->nextWaiting = NULL;
       this->prevWaiting = NULL;
     } else {
-      assert(!this->prevWaiting && "Inconstitent state");
+      assert(!this->prevWaiting && "Inconsistent state");
       // Notify lost, notify someone else.
       notify(self, table);
     }





More information about the vmkit-commits mailing list