[vmkit-commits] [vmkit] r180509 - Adding a different file for Unsafe in GNuClasspath
Peter Senna Tschudin
peter.senna at gmail.com
Thu Apr 25 10:19:56 PDT 2013
Author: peter.senna
Date: Thu Apr 25 12:17:47 2013
New Revision: 180509
URL: http://llvm.org/viewvc/llvm-project?rev=180509&view=rev
Log:
Adding a different file for Unsafe in GNuClasspath
(cherry picked from commit 5019278fba22b92b47524384fed4d9d04849e8d0)
Added:
vmkit/trunk/lib/j3/ClassLib/GNUClasspath/GNuClasspathUnsafe.inc
Added: vmkit/trunk/lib/j3/ClassLib/GNUClasspath/GNuClasspathUnsafe.inc
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/ClassLib/GNUClasspath/GNuClasspathUnsafe.inc?rev=180509&view=auto
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/GNUClasspath/GNuClasspathUnsafe.inc (added)
+++ vmkit/trunk/lib/j3/ClassLib/GNUClasspath/GNuClasspathUnsafe.inc Thu Apr 25 12:17:47 2013
@@ -0,0 +1,37 @@
+#include "VMStaticInstance.h"
+#include <stdlib.h>
+
+extern "C" {
+
+JNIEXPORT void JNICALL Java_sun_misc_Unsafe_unpark(
+JavaObject* unsafe, JavaObject* thread) {
+ 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.
+ 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 = (JavaThread*)field->getInstanceObjectField(vmthread);
+ while (th == 0) {
+ JavaThread::yield();
+ fprintf(stderr, "Case 1\n");
+ 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());
+}
+
+}
\ No newline at end of file
More information about the vmkit-commits
mailing list