[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