[vmkit-commits] [vmkit] r180513 - Implementing NewWeakGlobalReference

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


Author: peter.senna
Date: Thu Apr 25 12:18:06 2013
New Revision: 180513

URL: http://llvm.org/viewvc/llvm-project?rev=180513&view=rev
Log:
Implementing NewWeakGlobalReference
(cherry picked from commit e15c617f1d09386c08d42a0270455a605dc9e407)

Modified:
    vmkit/trunk/lib/j3/VMCore/Jni.cpp

Modified: vmkit/trunk/lib/j3/VMCore/Jni.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/j3/VMCore/Jni.cpp?rev=180513&r1=180512&r2=180513&view=diff
==============================================================================
--- vmkit/trunk/lib/j3/VMCore/Jni.cpp (original)
+++ vmkit/trunk/lib/j3/VMCore/Jni.cpp Thu Apr 25 12:18:06 2013
@@ -4159,15 +4159,43 @@ void ReleaseStringCritical(JNIEnv *env,
 
 
 jweak NewWeakGlobalRef(JNIEnv* env, jobject obj) {
-  NYI();
-  abort();
-  return 0;
+	JavaObject* Obj = NULL;
+	  llvm_gcroot(Obj, 0);
+
+	  BEGIN_JNI_EXCEPTION
+
+	  // Local object references.
+	  if (obj) {
+	    Obj = *(JavaObject**)obj;
+
+	    Jnjvm* vm = JavaThread::get()->getJVM();
+
+
+	    vm->globalRefsLock.lock();
+	    JavaObject** res = vm->globalRefs.addJNIReference(Obj);
+	    vm->globalRefsLock.unlock();
+
+	    RETURN_FROM_JNI((jweak)(jobject)res);
+	  } else {
+	    RETURN_FROM_JNI(0);
+	  }
+
+	  END_JNI_EXCEPTION
+	  RETURN_FROM_JNI(0);
 }
 
 
 void DeleteWeakGlobalRef(JNIEnv* env, jweak ref) {
-  NYI();
-  abort();
+	BEGIN_JNI_EXCEPTION
+
+	  Jnjvm* vm = myVM(env);
+	  vm->globalRefsLock.lock();
+	  vm->globalRefs.removeJNIReference((JavaObject**)ref);
+	  vm->globalRefsLock.unlock();
+
+	  END_JNI_EXCEPTION
+
+	  RETURN_VOID_FROM_JNI;
 }
 
 





More information about the vmkit-commits mailing list