[vmkit-commits] [vmkit] r180542 - Fixing the problem of deadlock waiting for blocking operation while GC is running. OpenJDK.

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


Author: peter.senna
Date: Thu Apr 25 12:21:40 2013
New Revision: 180542

URL: http://llvm.org/viewvc/llvm-project?rev=180542&view=rev
Log:
Fixing the problem of deadlock waiting for blocking operation while GC is running. OpenJDK.
(cherry picked from commit e1028fe6844bd657adb2ae19c3d94789552525c8)

Modified:
    vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc
    vmkit/trunk/lib/j3/VMCore/JavaThread.h

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=180542&r1=180541&r2=180542&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc (original)
+++ vmkit/trunk/lib/j3/ClassLib/OpenJDK/OpenJDK.inc Thu Apr 25 12:21:40 2013
@@ -3021,7 +3021,6 @@ JVM_GetThreadStateValues(JNIEnv* env, ji
     case vmkit::LockingThread::StateTerminated:
 	{
 		res = (ArraySInt32*)array->doNew(1, vm);
-		result = (jintArray)res;
 		ArraySInt32::setElement(res, javaThreadState , 0);
 		break;
 	}
@@ -3029,7 +3028,6 @@ JVM_GetThreadStateValues(JNIEnv* env, ji
     case vmkit::LockingThread::StateWaiting:
 	{
 		res = (ArraySInt32*)array->doNew(2, vm);
-		result = (jintArray)res;
 		ArraySInt32::setElement(res, vmkit::LockingThread::StateWaiting , 0);
 		ArraySInt32::setElement(res, vmkit::LockingThread::StateParked , 1);
 		break;
@@ -3038,7 +3036,6 @@ JVM_GetThreadStateValues(JNIEnv* env, ji
     case vmkit::LockingThread::StateTimeWaiting:
 	{
 		res = (ArraySInt32*)array->doNew(2, vm);
-		result = (jintArray)res;
 		ArraySInt32::setElement(res, vmkit::LockingThread::StateTimeWaiting , 0);
 		ArraySInt32::setElement(res, vmkit::LockingThread::StateTimeParked , 1);
 		break;
@@ -3048,7 +3045,7 @@ JVM_GetThreadStateValues(JNIEnv* env, ji
 		/* Unknown state - probably incompatible JDK version */
 		break;
 	}
-	RETURN_FROM_JNI(result);
+	RETURN_REF_FROM_JNI(res, jintArray);
 	END_JNI_EXCEPTION
 	return NULL;
 }
@@ -3064,10 +3061,7 @@ JVM_GetThreadStateValues(JNIEnv* env, ji
 JNIEXPORT jobjectArray JNICALL
 JVM_GetThreadStateNames(JNIEnv* env, jint javaThreadState, jintArray values) {
 	BEGIN_JNI_EXCEPTION
-	vmkit::Thread* th = vmkit::Thread::get();
-  	//th->enterUncooperativeCode();
-  	
-
+  
   ArrayObject* res = 0;
 jobjectArray result = 0;
 JavaObject* str = 0;
@@ -3088,7 +3082,6 @@ JnjvmClassLoader* loader;
 			//assert(ia.get_length() == 1 && ia.get_element(0) == THREAD_STATE_NEW);
 
 			res = (ArrayObject*)array->doNew(1, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("NEW"));
 			ArrayObject::setElement(res, str, 0);
 			break;
@@ -3097,7 +3090,6 @@ JnjvmClassLoader* loader;
     case vmkit::LockingThread::StateRunning:
 		{
 			res = (ArrayObject*)array->doNew(1, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("RUNNABLE"));
 			ArrayObject::setElement(res, str, 0);
 			break;
@@ -3106,7 +3098,6 @@ JnjvmClassLoader* loader;
     case vmkit::LockingThread::StateBlocked:
 		{
 			res = (ArrayObject*)array->doNew(1, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("BLOCKED"));
 			ArrayObject::setElement(res, str, 0);
 			break;
@@ -3115,7 +3106,6 @@ JnjvmClassLoader* loader;
     case vmkit::LockingThread::StateWaiting:
 		{
 			res = (ArrayObject*)array->doNew(2, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("WAITING.OBJECT_WAIT"));
 			ArrayObject::setElement(res, str, 0);
 			str = (vm->asciizToStr("WAITING.PARKED"));
@@ -3126,7 +3116,6 @@ JnjvmClassLoader* loader;
     case vmkit::LockingThread::StateTimeWaiting:
 		{	
 			res = (ArrayObject*)array->doNew(2, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("TIMED_WAITING.OBJECT_WAIT"));
 			ArrayObject::setElement(res, str, 0);
 			str = (vm->asciizToStr("TIMED_WAITING.PARKED"));
@@ -3137,7 +3126,6 @@ JnjvmClassLoader* loader;
     case vmkit::LockingThread::StateTerminated:
 		{
 			res = (ArrayObject*)array->doNew(1, vm);
-			result = (jobjectArray)res;
 			str = (vm->asciizToStr("TERMINATED"));
 			ArrayObject::setElement(res, str, 0);
 			break;
@@ -3148,7 +3136,7 @@ JnjvmClassLoader* loader;
 		break;
 	}
 	//th->leaveUncooperativeCode();
-	RETURN_FROM_JNI(result);
+	RETURN_REF_FROM_JNI(res, jobjectArray);
 	END_JNI_EXCEPTION
 	return NULL;
 }

Modified: vmkit/trunk/lib/j3/VMCore/JavaThread.h
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/JavaThread.h?rev=180542&r1=180541&r2=180542&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/JavaThread.h (original)
+++ vmkit/trunk/lib/j3/VMCore/JavaThread.h Thu Apr 25 12:21:40 2013
@@ -39,7 +39,7 @@ class Jnjvm;
   th->leaveUncooperativeCode(); \
   vmkit::KnownFrame Frame; \
   th->startKnownFrame(Frame); \
-  /*Frame.currentFP = vmkit::System::GetCallerAddress(); */ \
+  Frame.currentFP = vmkit::System::GetCallerAddress(); \
   TRY {
 
 #define END_JNI_EXCEPTION \





More information about the vmkit-commits mailing list