[vmkit-commits] [PATCH] OpenJDK.inc: Implement raw monitors

Will Dietz wdietz2 at illinois.edu
Wed Oct 26 18:57:36 PDT 2011


Inlined below.

~Will


>From 832268e746c259269095f3354cb0835c02fe525c Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Wed, 26 Oct 2011 20:53:21 -0500
Subject: [PATCH 2/3] OpenJDK.inc: Implement raw monitors

---
 lib/J3/ClassLib/OpenJDK/OpenJDK.inc |   30 ++++++++++++++++++++++++++----
 1 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
index 2380abd..eded2e1 100644
--- a/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
+++ b/lib/J3/ClassLib/OpenJDK/OpenJDK.inc
@@ -1532,22 +1532,44 @@ jio_vfprintf(FILE *, const char *fmt, va_list args) {
 typedef pthread_mutex_t Lock;
 JNIEXPORT void * JNICALL
 JVM_RawMonitorCreate(void) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  mvm::ThreadAllocator allocator;
+  Lock* L = (Lock*)malloc(sizeof(Lock));
+  pthread_mutex_init(L, NULL);
+
+  RETURN_FROM_JNI(L);
+  END_JNI_EXCEPTION
+
+  return 0;
 }

 JNIEXPORT void JNICALL
 JVM_RawMonitorDestroy(void *mon) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  Lock* L = (Lock*)mon;
+  pthread_mutex_destroy(L);
+  free(L);
+  RETURN_VOID_FROM_JNI;
+  END_JNI_EXCEPTION
 }

 JNIEXPORT jint JNICALL
 JVM_RawMonitorEnter(void *mon) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  Lock* L = (Lock*)mon;
+  jint res = pthread_mutex_lock(L);
+  RETURN_FROM_JNI(res);
+  END_JNI_EXCEPTION
+  return 0;
 }

 JNIEXPORT void JNICALL
 JVM_RawMonitorExit(void *mon) {
-  NYI();
+  BEGIN_JNI_EXCEPTION
+  Lock* L = (Lock*)mon;
+  pthread_mutex_unlock(L);
+  RETURN_VOID_FROM_JNI;
+  END_JNI_EXCEPTION
 }

 /*
-- 
1.7.5.1



More information about the vmkit-commits mailing list