[vmkit-commits] [vmkit] r180529 - Cleaning the code

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


Author: peter.senna
Date: Thu Apr 25 12:20:38 2013
New Revision: 180529

URL: http://llvm.org/viewvc/llvm-project?rev=180529&view=rev
Log:
Cleaning the code
(cherry picked from commit f21634a0caee535f60e9334bd0a04a75236cd885)

Modified:
    vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/UnsafeForOpenJDK.inc
    vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
    vmkit/trunk/lib/j3/VMCore/JavaThread.h

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=180529&r1=180528&r2=180529&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/ClasspathVMThread.inc Thu Apr 25 12:20:38 2013
@@ -126,10 +126,8 @@ JavaObject* vmthread) {
   
   JavaThread* th = (JavaThread*)field->getInstanceObjectField(vmthread);
   th->lockingThread.interruptFlag = 1;
-  //th->parkLock.interrupt();
-  //fprintf(stderr, "Interrupting started%lld\n", th->getThreadID());
-  th->parkLock.unpark();
-  //fprintf(stderr, "Interrupting done%lld\n", th->getThreadID());
+  th->parkLock.interrupt();
+  //th->parkLock.unpark();
   vmkit::FatLock* lock = th->lockingThread.waitsOn;
 
   // If the thread is blocked on a wait. We also verify nextWaiting in case

Modified: vmkit/trunk/lib/j3/ClassLib/OpenJDK/UnsafeForOpenJDK.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/OpenJDK/UnsafeForOpenJDK.inc?rev=180529&r1=180528&r2=180529&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/UnsafeForOpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/UnsafeForOpenJDK.inc Thu Apr 25 12:20:38 2013
@@ -8,32 +8,17 @@ JavaObject* unsafe, JavaObject* thread)
   llvm_gcroot(unsafe, 0);
   llvm_gcroot(thread, 0);
   Jnjvm* vm = JavaThread::get()->getJVM();
+  JavaField * field = vm->upcalls->eetop;
   
+  // Get the eetop field
   // It's possible that the thread to be interrupted has not finished
   // its initialization. Wait until the initialization is done.
-  //fprintf(stderr, "Case -1\n");
-//  vmthread = field2->getInstanceObjectField(thread);
-//  while (vmthread == 0) {
-//  	JavaThread::yield();
-//  	fprintf(stderr, "Case 0\n");
-//  	vmthread = field2->getInstanceObjectField(thread);
-//  }
-  JavaThread* th = 0;
+  while (field->getInstanceLongField(thread) == 0)
+    vmkit::Thread::yield();
   
-  // Get the eetop field
-  sint64 newTh = vm->upcalls->eetop->getInstanceLongField(thread);
-  th = (JavaThread*)newTh;
-  while (th == 0) {
-  	JavaThread::yield();
-  	//fprintf(stderr, "Case 1\n");
-  	newTh = vm->upcalls->eetop->getInstanceLongField(thread);
-  	th = (JavaThread*)newTh;
-  	//th = (JavaThread*)field->getInstanceObjectField(vmthread);
-  }
-  //fprintf(stderr, "unparking started %lld\n", th->getThreadID());
-  th->parkLock.unpark();
-  //fprintf(stderr, "Case 2\n");
-  //fprintf(stderr, "unparking done %lld\n", th->getThreadID());
+  JavaThread* jth = (JavaThread*)field->getInstanceLongField(thread);
+
+  jth->parkLock.unpark();
 }
 
 }

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.cpp?rev=180529&r1=180528&r2=180529&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.cpp Thu Apr 25 12:20:38 2013
@@ -205,45 +205,11 @@ inline void _OrderAccess_fence() {
 // Implementation of method park, see LockSupport.java
 // time is in nanoseconds if !isAboslute, otherwise it is in milliseconds
 void ParkLock::park(bool isAbsolute, int64_t time, JavaThread* thread) {
-//	lock.lock();
-//		if (permit == 0){
-//			permit = 1;
-//			__sync_synchronize();
-//			lock.unlock(thread);
-//			return;
-//		}
-//		if (isAbsolute && time == 0) {
-//			lock.unlock(thread);
-//			return;
-//		}
-//		if (thread->lockingThread.interruptFlag) {
-//			lock.unlock(thread);
-//			return;
-//		}
-//		if (time == 0) {
-//			thread->setState(vmkit::LockingThread::StateWaiting);
-//			//permit = 2;
-//			__sync_synchronize();
-//			cond.wait(&lock);
-//			//if (permit == 2) permit = 1;
-//			//permit = 1;
-//		}
-//		else {
-//			thread->setState(vmkit::LockingThread::StateTimeWaiting);
-//			//permit = 2;
-//			__sync_synchronize();
-//			cond.myTimeWait(&lock, isAbsolute, time);
-//			//if (permit == 2) permit = 1;
-//			//permit = 1;
-//		}
-//		thread->setState(vmkit::LockingThread::StateRunning);
-//		__sync_synchronize();
-//	lock.unlock(thread);
 	 // Optional fast-path check:
 	  // Return immediately if a permit is available.
-	  if (permit > 0) {
-		  permit = 0 ;
-		  _OrderAccess_fence();//__sync_synchronize();//OrderAccess::fence();
+	  if (permit) {
+		  permit = false ;
+		  //_OrderAccess_fence();//__sync_synchronize();//OrderAccess::fence();
 	      return ;
 	  }
 
@@ -257,7 +223,6 @@ void ParkLock::park(bool isAbsolute, int
 	    return;
 	  }
 
-
 	  // Enter safepoint region
 	  // Beware of deadlocks such as 6317397.
 	  // The per-thread Parker:: mutex is a classic leaf-lock.
@@ -272,14 +237,12 @@ void ParkLock::park(bool isAbsolute, int
 	    return;
 	  }
 
-	  //fprintf(stderr, "Starting method %lld\n", thread->getThreadID());
 
 	  int status ;
-	  if (permit > 0)  { // no wait needed
-		permit = 0;
+	  if (permit)  { // no wait needed
+		permit = false;
 		lock.unlock(thread);
-		_OrderAccess_fence();//__sync_synchronize();//OrderAccess::fence();
-		//fprintf(stderr, "Finishing method 0 %lld\n", thread->getThreadID());
+		//_OrderAccess_fence();
 		return;
 	  }
 
@@ -289,66 +252,43 @@ void ParkLock::park(bool isAbsolute, int
 
 	  if (time == 0) {
 		  //thread->setState(vmkit::LockingThread::StateWaiting);
+		  thread->setState(vmkit::LockingThread::StateWaiting);
+		  //_OrderAccess_fence();
+		  //thread->doYield = true;
 		  cond.wait(&lock);
+		  //thread->doYield = false;
+		  //cond.myTimeWait(&lock, false, 1000000000);
 	  } else {
-		  //thread->setState(vmkit::LockingThread::StateTimeWaiting);
+		  thread->setState(vmkit::LockingThread::StateTimeWaiting);
 		  cond.myTimeWait(&lock, isAbsolute, time);
 	  }
+	  thread->setState(vmkit::LockingThread::StateRunning);
 	  //thread->setState(vmkit::LockingThread::StateRunning);
-	  permit = 0 ;
+	  permit = false ;
+	  //_OrderAccess_fence();
 	  lock.unlock(thread);
 	  // If externally suspended while waiting, re-suspend
 	  //if (jt->handle_special_suspend_equivalent_condition()) {
 	  //  jt->java_suspend_self();
 	  //}
-
-	  __sync_synchronize();//OrderAccess::fence();
-	  //fprintf(stderr, "Finishing method 1 %lld\n", thread->getThreadID());
 }
 
 void ParkLock::unpark() {
-
 	JavaThread* thread = (JavaThread*)vmkit::Thread::get();
-	//bool flag = false;
-//	lock.lock();
-//		if (permit == 0) {
-//			lock.unlock(thread);
-//			return;
-//		}
-//		//if (permit != 0)
-//		//	flag = !__sync_bool_compare_and_swap(&permit, 1, 0);
-//		permit = 0;
-//		__sync_synchronize();
-//		//flag = true;
-//		cond.signal();
-//	lock.unlock(thread);
-	//if (flag)
-	//	cond.signal();
-	int s ;
 	lock.lock();
-	s = permit;
-	permit = 1;
-	_OrderAccess_fence();
-	if (s < 1) {
-		if (false) {
-			cond.signal();
-			lock.unlock(thread);
-		} else {
-			lock.unlock(thread);
-			cond.signal();
-		}
-	} else {
+	permit = true;
+	//_OrderAccess_fence();
+	cond.signal();
+	lock.unlock(thread);
+}
+
+void ParkLock::interrupt() {
+	//
+	if (lock.tryLock() == 0) {
+		JavaThread* thread = (JavaThread*)vmkit::Thread::get();
+		cond.signal();
+
 		lock.unlock(thread);
 	}
+	//_OrderAccess_fence();
 }
-
-//void ParkLock::interrupt() {
-//	//
-//	if (lock.tryLock() == 0) {
-//		JavaThread* thread = (JavaThread*)vmkit::Thread::get();
-//		cond.signal();
-//
-//		lock.unlock(thread);
-//	}
-//	_OrderAccess_fence();
-//}

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180529&r1=180528&r2=180529&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 12:20:38 2013
@@ -62,7 +62,7 @@ class ParkLock {
 private:
 	vmkit::LockNormal lock;
 	vmkit::Cond cond;
-	int permit;
+	bool permit;
 
 public:
 	ParkLock();
@@ -70,7 +70,7 @@ public:
 
 	void park(bool isAbsolute, int64_t time, JavaThread* thread);
 	void unpark();
-//	void interrupt();
+	void interrupt();
 };
 
 /// JavaThread - This class is the internal representation of a Java thread.





More information about the vmkit-commits mailing list