[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