[vmkit-commits] [vmkit] r180506 - Implementing park/unpark OpenJDK
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:19:35 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:17:33 2013
New Revision: 180506
URL: http://llvm.org/viewvc/llvm-project?rev=180506&view=rev
Log:
Implementing park/unpark OpenJDK
(cherry picked from commit f6dd8d62edd95c98b1ec422e2f27dea961054eef)
Modified:
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
vmkit/trunk/lib/j3/ClassLib/Unsafe.inc
Modified: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp?rev=180506&r1=180505&r2=180506&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp (original)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/JavaUpcalls.cpp Thu Apr 25 12:17:33 2013
@@ -1169,3 +1169,4 @@ void Classpath::InitializeSystem(Jnjvm *
#include "ClasspathVMThread.inc"
#include "ClasspathVMThrowable.inc"
#include "Unsafe.inc"
+#include "GNuClasspathUnsafe.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=180506&r1=180505&r2=180506&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 12:17:33 2013
@@ -787,6 +787,7 @@ JVM_Interrupt(JNIEnv *env, jobject _thre
JavaThread* jth = (JavaThread*)field->getInstanceLongField(thread);
jth->lockingThread.interruptFlag = 1;
vmkit::FatLock* lock = jth->lockingThread.waitsOn;
+ jth->parkLock.unpark();
// If the thread is blocked on a wait. We also verify nextWaiting in case
// the thread has been notified.
@@ -2992,5 +2993,4 @@ JNIEXPORT void JNICALL
JVM_GetVersionInfo(JNIEnv* env, jvm_version_info* info, size_t info_size) {
NYI();
}
-
// vim: set ft=cpp:
Modified: vmkit/trunk/lib/j3/ClassLib/Unsafe.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/Unsafe.inc?rev=180506&r1=180505&r2=180506&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/Unsafe.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/Unsafe.inc Thu Apr 25 12:17:33 2013
@@ -484,6 +484,7 @@ JavaObject* unsafe, jlong ptr, jlong val
//===--- Park/Unpark thread support ---------------------------------------===//
JNIEXPORT void JNICALL Java_sun_misc_Unsafe_park(
JavaObject* unsafe, jboolean isAbsolute, jlong time) {
+ return;
llvm_gcroot(unsafe, 0);
JavaThread* thread = (JavaThread*)JavaThread::get();
thread->parkLock.park(isAbsolute, time, thread);
@@ -491,31 +492,39 @@ JavaObject* unsafe, jboolean isAbsolute,
JNIEXPORT void JNICALL Java_sun_misc_Unsafe_unpark(
JavaObject* unsafe, JavaObject* thread) {
+ return;
llvm_gcroot(unsafe, 0);
llvm_gcroot(thread, 0);
- JavaObject* vmthread;
- llvm_gcroot(vmthread, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
- JavaField* field = vm->upcalls->vmdataVMThread;
- JavaField* field2 = vm->upcalls->vmThread;
// It's possible that the thread to be interrupted has not finished
// its initialization. Wait until the initialization is done.
- vmthread = field2->getInstanceObjectField(thread);
- while (vmthread == 0) {
- JavaThread::yield();
- vmthread = field2->getInstanceObjectField(thread);
- }
- JavaThread* th = (JavaThread*)field->getInstanceObjectField(vmthread);
+ //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;
+
+ // Get the eetop field
+ sint64 newTh = vm->upcalls->eetop->getInstanceLongField(thread);
+ th = (JavaThread*)newTh;
while (th == 0) {
JavaThread::yield();
- th = (JavaThread*)field->getInstanceObjectField(vmthread);
+ //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());
}
+
//===--- Monitor support --------------------------------------------------===//
JNIEXPORT void JNICALL Java_sun_misc_Unsafe_tryMonitorEnter(
JavaObject* unsafe, JavaObject * obj) {
More information about the vmkit-commits
mailing list